Cod*_*ray 25
不,在UI线程上引发了计时器事件.
你不会有任何同步问题.这是在WinForms应用程序中使用的正确版本的计时器控件; 它专门设计用于满足您的要求.它是使用标准的Windows计时器在引擎盖下实现的.
该文件证实了这一点备注部分:
Timer用于以用户定义的间隔引发事件.此Windows计时器专为使用UI线程执行处理的单线程环境而设计.它要求用户代码具有可用的UI消息泵,并且始终在同一线程中操作,或者将调用编组到另一个线程上.
使用此计时器时,请使用Tick事件执行轮询操作或在指定的时间段内显示闪屏.只要Enabled属性设置为true且Interval属性大于零,就会根据Interval属性设置按间隔引发Tick事件.
没有.
Windows.Forms Timer的重点是它在GUI Thread上运行.
Windows(WinForms)运行一个叫做MessagePump的东西(参见参考资料Application.Run()
),这就是让Timer成为可能的原因.
所有代码都以某种方式作为Eventhandler的一部分运行,并且Timer tick将永远不会"中断"任何其他事件处理程序.
Windows.Forms计时器将事件提升回UI线程,可能是通过sync-context.
如果你想要一个非UI线程,还有其他定时器 - 例如System.Timers.Timer或System.Threading.Timer