c# winform 定时器控件到期不执行的问题。

时间:2021-04-05 11:45:57   收藏:0   阅读:0

一个测试用小程序中用了两个timer控件(System.Windows.Forms.Timer)来执行定时任务。其中一个定时器timerA在异步获取到资源后会在这个异步的task(System.Threading.Tasks )中启动执行。日志打印中发现所有的启动条件都满足,但是无论如何都看不到此task执行。

于是翻了翻MSDN,微软对这个控件的定义如下:实现按用户定义的时间间隔引发事件的计时器。 此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用出处。也就意味着,如果不是UI线程的话,定时器可能是不会被执行的。

解决办法也就出来了:使用System.Timers命名空间下的Timer。

微软的描述:

Windows 窗体计时器组件是单线程的,且限制为55毫秒的准确度。 如果需要具有更高准确性的多线程计时器,请使用 Timer 命名空间中的类 System.Timers

从上述描述中可以看出,不仅timer控件(System.Windows.Forms.Timer)只能在窗口中使用,而且精度也不能保证,只能用来执行简单的任务。

改为 System.Timers 的timer后,程序运行正常。

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!