一个测试用小程序中用了两个timer控件(System.Windows.Forms.Timer)来执行定时任务。其中一个定时器timerA在异步获取到资源后会在这个异步的task(System.Threading.Tasks )中启动执行。日志打印中发现所有的启动条件都满足,但是无论如何都看不到此task执行。
于是翻了翻MSDN,微软对这个控件的定义如下:。也就意味着,如果不是UI线程的话,定时器可能是不会被执行的。
解决办法也就出来了:使用System.Timers命名空间下的Timer。
微软的描述:
System.Timers 。
从上述描述中可以看出,不仅timer控件(System.Windows.Forms.Timer)只能在窗口中使用,而且精度也不能保证,只能用来执行简单的任务。
System.Timers 的timer后,程序运行正常。