c# - System.Windows.Forms.Timer 未在 Foreach block 内触发 Tick 事件

标签 c# winforms timer

我有一个与我的主窗体关联的 System.Windows.Forms.Timer。我需要这个计时器每 1000 毫秒触发一次,以便可以执行一些工作。 Form.Shown 事件中的 Timer.Enabled 属性设置为 true,间隔设置为 1000。

Timer.Tick 事件在大多数情况下每秒都会触发一次。但是,当我的应用程序正在执行 foreach 语句时,Tick 事件停止触发。我试过 Thread.Sleep 但没有帮助。有没有人有什么建议?处理我的 Timer.Tick 事件的代码包含异常处理,并且我已验证该事件在执行 foreach block 期间停止在调试器中触发。此外,我的应用程序此时不是多线程的。有什么建议吗?

最佳答案

如果您让 UI 线程在一个循环中保持忙碌,那么不,定时器 Tick 处理程序将无法执行。如果您有一个长时间运行的循环,请将其推送到后台线程。 sleep 无济于事,因为这也会阻塞 UI 线程。还有其他计时器不会在 UI 线程 (System.Timer) 上触发,但如果您的 tick 需要访问 UI,那么如果 UI 线程仍然很忙,那实际上对您没有帮助。

关于c# - System.Windows.Forms.Timer 未在 Foreach block 内触发 Tick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22100634/

相关文章:

timer - STM32F1定时器共享用于PWM和中断

c - 如何处理UDP协议(protocol)的多个重传定时器?

c# - 棘手的 Quartz.NET 场景

c# - 这种设计模式叫什么?

c# - 在特定时间播放WAV?

c# - 从 C# 中的另一个窗体调用按钮

WinForms 和子窗体 - 如何合并多余的 "utility"代码?

c# - 从数据库中获取一个数据单元格

c# - 在单独的进程中运行代码

c# - 是否可以在同一解决方案中使用带有单独类库的后台 worker