亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

ACCP培訓

Winform多線程方式登錄代碼

時間:2024-07-22 02:10:25 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("錄入登錄信息發(fā)生異常,請和管理員聯(lián)系", 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;

  //結束執(zhí)行

  Splasher.EndExecute(previousStepResult);

  }

  catch (Exception error)

  {

  //略

  }

  }

  }

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

  static public void Show()

  {

  try

  {

  //當?shù)诙握{用的時候MySplashThread != null了這個時候

  if (MySplashThread != null)

  {

  // public void Reset()

  //{

  // progressView.Reset();

  //currentItemIndex = 0;

  //}

  //相當于觸發(fā)MySplashForm.Reset事件。

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

  //將窗體顯示出來。

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

  return;

  }

  //當?shù)谝淮蔚臅r候調用構造函數(shù)構造出窗體。構造出來以后myResetEvent.Set();通知

  if (MySplashForm == null)

  {

  MySplashForm = new LoginProcessForm(myResetEvent);

  }

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

  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);

  }

  }

  //構造函數(shù)。

  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)

  {

  //回調會繼續(xù)執(zhí)行previousProcessResult,等下次的時候就會到下面去執(zhí)行了。

  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;

  }

  }

【W(wǎng)inform多線程方式登錄代碼】相關文章:

Java多線程的實現(xiàn)方式11-03

顯示jquery代碼的四種方式10-31

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

Excel2010的多線程計算10-11

過濾HTML代碼08-30

HTML的代碼注釋09-24

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

java多線程面試題201707-27

科目三扣分代碼11-02

PHP代碼優(yōu)化技巧09-24