如何避免计时器滴答中断主线程?
Posted
技术标签:
【中文标题】如何避免计时器滴答中断主线程?【英文标题】:How to avoid timer tick interrupting main thread? 【发布时间】:2015-05-14 03:05:11 【问题描述】:我有一个计时器,它在滴答作响时会做一些事情。我面临一个问题,当主线程正在处理某些事情并且计时器滴答时,主线程被计时器滴答事件调用的操作中断。
有没有办法编程让主线程中的进程完成,然后只执行定时器滴答事件调用的动作?
谢谢!
【问题讨论】:
但是如果在主线程进程中定时器计时多次怎么办?您可能应该简单地在另一个线程中进行 OnTick 处理。 【参考方案1】:WinForms Timer
的Tick
事件在 UI 线程上引发,因此事件处理程序在 UI 线程上执行。然后,您可以启动在辅助线程上执行的任务,以保持 UI 线程空闲。但请记住,任何时候您与 UI 交互,例如获取或设置TextBox
的Text
,您必须在UI 线程上进行。
或者,您可以改用System.Timers.Timer
类。默认情况下,它是在辅助线程上引发的 Elapsed
事件,因此不需要额外的工作。如果您设置了SynchronizingObject
属性,那么该事件将在拥有该对象的线程上引发,否则它将在线程池线程上引发。
【讨论】:
以上是关于如何避免计时器滴答中断主线程?的主要内容,如果未能解决你的问题,请参考以下文章