using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace FlexenabledLic { public delegate void LoginResultEventHandler(LoginResult loginResult); public struct LoginResult { public int Status; public string Message; public string AppName; } /// /// 登录管理的类. /// public class LicHelp { public LoginResultEventHandler LoginResultEvent; private BackgroundWorker backgroundWorker1; private string AppName; /// /// Prevents a default instance of the class from being created. /// private LicHelp() { backgroundWorker1 = new BackgroundWorker(); backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork); backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(loginWorkerCompleted); } /// /// 登录结果事件. /// /// The sender. /// The e. private void loginWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { LoginResult loginResult = (LoginResult)e.Result; LoginResultEvent?.Invoke(loginResult); } /// /// 执行登录. /// /// The sender. /// The e. private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { LoginResult loginResult; loginResult.Status = -1; loginResult.AppName = AppName; BackgroundWorker worker = sender as BackgroundWorker; try { LicHelp.Initialize(); } catch (Exception ex) { loginResult.Status = -1; loginResult.Message = ex.Message; e.Result = loginResult; return; } StringBuilder strLogResult = new StringBuilder(200); int nStat = LicHelp.CheckOut(AppName, strLogResult); if (nStat != 0) { loginResult.Message = "登录失败"; } else { loginResult.Message = "登录成功"; } loginResult.Status = nStat; // 将结果传递给 RunWorkerCompleted 事件 e.Result = loginResult; } /// /// Initializes a new instance of the class. /// /// The app name. public LicHelp(string appName) : this() { AppName = appName; } /// /// 执行登录 /// public void DoLogin() { if (!backgroundWorker1.IsBusy) { backgroundWorker1.RunWorkerAsync(AppName); } } /// /// 执行登出. /// /// An int. public int LogOut() { int nStat = -1; try { nStat = CheckIn(AppName); CleanUp(); } catch { } return nStat; } /// prototypes from DLL [DllImport("FlexDll.dll", CharSet = CharSet.Ansi)] public static extern int Initialize(); [DllImport("FlexDll.dll", CharSet = CharSet.Ansi)] public static extern int CheckOut(String FeatureName, StringBuilder OutMsg); [DllImport("FlexDll.dll", CharSet = CharSet.Ansi)] public static extern int CheckIn(String FeatureName); [DllImport("FlexDll.dll", CharSet = CharSet.Ansi)] public static extern int CleanUp(); } }