C# WinForms :- 为什么当 UI 执行其他操作时线程计时器滴答事件没有过去?

CHa*_*ike 3 c# multithreading timer winforms

在我的应用程序 UI 中,我每 1 秒通过 Windows Timer 更新一次网格。

当我在做其他一些属于其他 windows 窗体的 UI 操作时,它不能正常工作(这基本上是使用选项卡式窗体)

我为 Timer_Tick 事件添加了跟踪并登录到文件。

我们发现在另一个 UI 操作(打开和关闭另一个窗体)时丢失了日志数据。Timer_Tick 此时未命中。

日志数据跟踪 有什么建议...? 在此处输入图片说明

Cor*_*rey 5

问题是 UI 在单个线程中运行。该线程上的任何长时间运行的阻塞操作——比如打开一个表单、运行一些代码以响应按钮点击等——将阻止计时器触发。这就是单线程编程的本质。

如果您绝对需要每秒运行一次代码,无论 UI 线程中发生了什么,您都需要使用第二个线程。

相关链接:

而且重要的是,与从上述任何你的UI交互: