之前用的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("开始干活了没?" );
}
这样改过之后就没啥问题了。