发现问题:在定时器事件处理程序以外,调用timer.Stop()方法,定时器不会停止,还在存活。
解决方案:将Stop方法的调用,放在 定时器的事件处理程序内部。
举例:
当主线程执行完毕,为空后,我想停止timer_Get32IO时钟,代码可以这么写。
此时,如果主线程为空,定时器会停下。如果不为空,定时器则继续运行。
代码语言:csharp复制public static Timer timer_Get32IO = new Timer();
timer_Get32IO.Interval = 200;
timer_Get32IO.Elapsed = new ElapsedEventHandler(timer_Get32IOTick);
private void timer_Get32IOTick(object sender, EventArgs e)
{
timer_Get32IO.Stop();
if(ThreadMain != null)
{
Test_sysnet.ClientSendToSer(DI_DO16.GetDI16State, sendtype.get_input);
Test_sysnet.ClientSendToSer(DI_DO16.GetDO16State, sendtype.get_output);
timer_Get32IO.Start();
}
}
启发:使用System.Timers.Timer下的定时器,想在某条件发生时,调用Stop()关定时器,必须把判断写在定时器的事件处理程序内调用。
创作不易,如果有帮助,一键三连吧!