【问题标题】:How to avoid timer tick interrupting main thread?如何避免计时器滴答中断主线程?
【发布时间】:2015-05-14 03:05:11
【问题描述】:

我有一个计时器,它在滴答作响时会做一些事情。我面临一个问题,当主线程正在处理某些事情并且计时器滴答时,主线程被计时器滴答事件调用的操作中断。

有没有办法编程让主线程中的进程完成,然后只执行定时器滴答事件调用的动作?

谢谢!

【问题讨论】:

  • 但是如果在主线程进程中定时器计时多次怎么办?您可能应该简单地在另一个线程中进行 OnTick 处理。

标签: c# multithreading timer interrupt


【解决方案1】:

WinForms TimerTick 事件在 UI 线程上引发,因此事件处理程序在 UI 线程上执行。然后,您可以启动在辅助线程上执行的任务,以保持 UI 线程空闲。但请记住,任何时候您与 UI 交互,例如获取或设置TextBoxText,您必须在UI 线程上进行。

或者,您可以改用System.Timers.Timer 类。默认情况下,它是在辅助线程上引发的 Elapsed 事件,因此不需要额外的工作。如果您设置了SynchronizingObject 属性,那么该事件将在拥有该对象的线程上引发,否则它将在线程池线程上引发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多