<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Winform多線程方式登錄代碼

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

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

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

      bool restart = true;

      while (restart)

      {

      Start(out restart);

      }

      (1):在主進程中不停的調(diào)用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;

      //結(jié)束執(zhí)行

      Splasher.EndExecute(previousStepResult);

      }

      catch (Exception error)

      {

      //略

      }

      }

      }

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

      static public void Show()

      {

      try

      {

      //當?shù)诙握{(diào)用的時候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候調(diào)用構造函數(shù)構造出窗體。構造出來以后myResetEvent.Set();通知

      if (MySplashForm == null)

      {

      MySplashForm = new LoginProcessForm(myResetEvent);

      }

      //這里只是每次都調(diào)用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)

      {

      //回調(diào)會繼續(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)方式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代碼優(yōu)化技巧09-24

    主站蜘蛛池模板: 国产精品久线在线观看| 欧美一区二区精品久久| 久久99国产精品99久久| 最新在线精品国自av| 国产精品久久久久久久午夜片| 亚洲动漫精品无码av天堂| 久久精品18| 秋霞午夜鲁丝片午夜精品久| 精品国产v无码大片在线观看| 亚洲A∨精品一区二区三区| 国产成人无码精品久久久久免费| 97久久国产亚洲精品超碰热| 亚洲精品自在在线观看| 欧美亚洲另类精品第一页| 国产精品1024在线永久免费| 国内精品久久久久久野外| 国产日产韩国精品视频| 无码人妻精品一区二区三18禁| 日韩AV毛片精品久久久| 久久狠狠一本精品综合网| 国产精品日韩欧美久久综合| 久久这里只有精品久久| 福利姬在线精品观看| 国产精品无码专区| 全球AV集中精品导航福利| 亚洲无码精品浪潮| 亚洲国产成人精品女人久久久| 久久精品国产一区二区三区不卡| 国产精品永久免费视频| 国产精品内射婷婷一级二| 98精品国产自产在线XXXX| 精品国产一区二区三区免费| 国产精品福利在线观看| 国产精品一二三区| 国产精品久久99| 久久精品国产免费| 亚洲精品免费在线观看| 99久久国产综合精品成人影院| 2021最新国产精品一区| 99久久精品免费看国产一区二区三区| 久久精品人人做人人爽电影|