Winform多線程方式登錄代碼

時間:2024-10-10 19:18:57 ACCP培訓 我要投稿
  • 相關推薦

關于Winform多線程方式登錄代碼

  為了方便大家學習相關的知識,YJBYS小編下面為你整理了關于Winform多線程方式登錄代碼,希望對你有所幫助。

  bool restart = true;

  while (restart)

  {

  Start(out restart);

  }

  (1):在主進程中不停的調用start.

  void Start(out bool restart)

  {

  bool connected = false;

  restart = false;

  string[] userInfo = null;

  try

  {

  //打開LoginInfoForm窗體,返回用戶名密碼。

  userInfo = GetLoginInfo();// Splasher.GetLoginInfo();

  if (userInfo == null)

  {

  loginOK = false;

  return;

  }

  //啟動登陸后臺線程。LoginProcessForm窗體啟動MySplashThread啟動不停的打開LoginProcessForm窗體。

  Splasher.Show();

  }

  catch (Exception err)

  {

  DebugHelper.Write(err);

  Splasher.ShowDialog("錄入登錄信息發生異常,請和管理員聯系", MessageTipType.Error);

  return;

  }

  eProcessState previousStepResult = eProcessState.Complete;

  while (Splasher.StartExecute())

  {

  try

  {

  switch (Splasher.CurrentStep)

  {

  case eLoginState.__:

  case eLoginState.__:

  case eLoginState.__:

  case eLoginState.__:

  }

  previousStepResult = eProcessState.Complete;

  //結束執行

  Splasher.EndExecute(previousStepResult);

  }

  catch (Exception error)

  {

  //略

  }

  }

  }

  //start中的對過程的控制。

  static public void Show()

  {

  try

  {

  //當第二次調用的時候MySplashThread != null了這個時候

  if (MySplashThread != null)

  {

  // public void Reset()

  //{

  // progressView.Reset();

  //currentItemIndex = 0;

  //}

  //相當于觸發MySplashForm.Reset事件。

  MySplashForm.Invoke(new MethodInvoker(MySplashForm.Reset));

  //將窗體顯示出來。

  MySplashForm.Invoke(new MethodInvoker(MySplashForm.Show));

  return;

  }

  //當第一次的時候調用構造函數構造出窗體。構造出來以后myResetEvent.Set();通知

  if (MySplashForm == null)

  {

  MySplashForm = new LoginProcessForm(myResetEvent);

  }

  //這里只是每次都調用Application.Run(MySplashForm);作用相當于建立起信息循環隊列

  MySplashThread = new Thread(new ThreadStart(Splasher.ShowThread));

  MySplashThread.IsBackground = true;

  MySplashThread.SetApartmentState(ApartmentState.STA);

  MySplashThread.Start();

  //等待直到myResetEvent.Set();

  myResetEvent.WaitOne(5000);

  }

  catch (Exception err)

  {

  DebugHelper.Write(err);

  }

  }

  //構造函數。

  public LoginProcessForm(AutoResetEvent autoreset)

  {

  myResetEvent = autoreset;

  Renderer = new SkinFormLoginFormRender();

  InitializeComponent();

  //this.TopMost = true;

  //this.CloseBox = true;

  CanMoveWindow = false;

  labelVersion.Text = "Version:" + AssemblyInfoHelper.AssemblyFileVersion;

  this.Load += new EventHandler(LoginProcessForm_Load);

  }

  delegate void EndExecuteCallback(eProcessState previousProcessResult);

  static public void EndExecute(eProcessState previousProcessResult)

  {

  //winform中子線程不能更新主線程的控件。所以MySplashForm.InvokeRequired代表是否需要更新主線程控件。

  //如果需要更新的話MySplashForm.Invoke

  if (MySplashForm.InvokeRequired)

  {

  //回調會繼續執行previousProcessResult,等下次的時候就會到下面去執行了。

  MySplashForm.Invoke(new EndExecuteCallback(EndExecute), previousProcessResult);

  }

  else

  {

  //如果

  MySplashForm.EndExecute(previousProcessResult);

  }

  }

  ///

  /// 進入下一過程

  ///

  ///

  ///

  public void EndExecute(eProcessState previousProcessResult)

  {

  //progressView為我們使用的用戶控件

  progressView.SetTip(processItems[currentItemIndex], previousProcessResult);

  currentItemIndex++;

  }

  //關閉代碼

  static public void Close()

  {

  try

  {

  if (MySplashThread == null) return;

  if (MySplashForm == null) return;

  try

  {

  MySplashForm.Invoke(new MethodInvoker(MySplashForm.Close));

  }

  catch (Exception err)

  {

  DebugHelper.Write(err);

  }

  MySplashThread.Abort();

  }

  catch (Exception err)

  {

  DebugHelper.Write(err);

  }

  finally

  {

  MySplashThread = null;

  MySplashForm = null;

  }

  }

【Winform多線程方式登錄代碼】相關文章:

Java多線程的實現方式07-08

顯示jquery代碼的四種方式06-26

PHP Curl多線程原理詳解09-11

HTML的代碼注釋10-07

過濾HTML代碼08-29

關于MyEclipse代碼提示設置包括html和jsp的代碼09-25

java多線程面試題201710-03

asp緩存類代碼09-28

關于AJAX類代碼09-19

PHP代碼優化技巧09-24

亚洲制服丝袜二区欧美精品,亚洲精品无码视频乱码,日韩av无码一区二区,国产人妖视频一区二区
五月天精品视频在线观看 | 亚洲国产2020最新 | 亚洲色中文字幕在线播放囯产免费 | 亚洲乱码中文字幕永久在线 | 亚洲精品素人在线观看 | 日本韩国欧美在线另类不卡 |