• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. 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

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 亚洲日韩欧洲日本国产综合 | 日本中文字幕在线2020 | 中文字幕制服丝袜一区二区 | 尹人久久久香蕉精品 | 综合伊人久久在 | 自拍欧美日韩一区二区三区 |