線程實現間隔時間運行一次

之前用的System.Timers.Timer myTimer=new System.Timers.Timer();  的定時器,不知道什麼鬼,跑一會停一會。有瑕疵;

後來心一橫就改用線程了,因爲從原理上將,定時器也是個線程,只是封裝了一個定時功能。

定義全局變量的線程:

Thread LogThread;

在構造函數中初始化:

      LogThread = new Thread(new ThreadStart(timer1_Tick));
             LogThread.IsBackground = true;
             if (bStop == true)
             {
                 LogThread.Start();//起線程  
             } 

下面是線程執行的操作:

   private void timer1_Tick()
        {//每隔1分鐘如果機器當前空閒的話,檢查與服務器是否連接  
            
            while (true)
            {
                bStop = false;
                if (!BClickTest.IsStart)
                ClientSendMsg("ImFree");//告知服務器,我空閒
                //如果未連接則請求連接服務器
                if(!connectedflag)  
                   this.Connection();                
                System.Threading.Thread.Sleep(10000);
            }           
        }


這時候就實現了每個10秒執行一次線程操作,但是我的功能還需要實現自動控制線程的裝死和復活:

             if (!string.IsNullOrWhiteSpace(strRecMsg) && strRecMsg == "end")
                    {                        
                        LogThread.Suspend(); 
                        myTimer.Enabled = false;
                        LogHelper.WriteLog("先別幹活了。");
                    }
                    else if (!string.IsNullOrWhiteSpace(strRecMsg) && strRecMsg == "start")
                    {
                        if (LogThread.ThreadState.ToString().Contains("Suspended"))
                        { LogThread.Resume(); }
                        myTimer.Enabled = true;
                        LogHelper.WriteLog("開始幹活了沒?" );
                    }

這樣改過之後就沒啥問題了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章