我有一个短间隔(33毫秒)的WinForm计时器。
我的应用程序中有其他代码可以启用和禁用此计时器。
在timer事件处理程序中,timer.Enabled = true一定是真的吗?或者是否有可能在处理程序开始执行时,另一段代码可能已禁用计时器?
答案 0 :(得分:5)
是否一定是真的,timer.Enabled = true?
是。可以引发Tick事件的唯一方法是当UI线程空闲并且不再执行任何代码时。然后它重新进入调度程序循环以等待另一个通知。如果有任何代码禁用了计时器,则该代码必须在 UI线程空闲之前运行。由于一切都是同步的,因此您很难保证Tick不会再触发。
在工作线程上停止计时器在技术上是有效的。但是,当然你再也没有一个像样的执行订单保证了。在工人上启动计时器是无效的,并且不会达到目的,它根本不会打勾。
请注意System.Timers.Timer,其Elapsed事件在线程池线程上运行,并且可能已被安排在禁用它之前执行。它仍在运行。