C#中多线程和定时器是不是有冲突?

2025-04-23 18:10:26
推荐回答(1个)
回答1:

timer控件引用的是Sytem.Windows.Forms.Timer类。
Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理。 它要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。
所以说Sytem.Windows.Forms.Timer是工作在UI线程上的。 而你的例子并不是, 你把Timer实例工作在了另外一个你自己创建的Thread中而不是UI线程中。这就解释了为什么不能工作的原因。
也就是说timer控件适合单线程环境。

你在这里应该用Sytem.Timers.Timer类。
详情:https://msdn.microsoft.com/zh-cn/library/system.windows.forms.timer(VS.80).aspx
https://msdn.microsoft.com/zh-cn/library/system.timers.timer.aspx
参考:https://social.msdn.microsoft.com/Forums/sqlserver/zh-CN/857bf39e-e5b1-49d5-af72-58c157fd841d/timertimer