之前用的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("開始幹活了沒?" );
}
這樣改過之後就沒啥問題了。