【发布时间】:2012-11-30 22:11:56
【问题描述】:
来自 MSDN:
Timer.Elapsed 事件在 ThreadPool 线程上引发,因此事件处理方法可能在一个线程上运行,同时对 Timer.Stop 方法的调用在另一个线程上运行。这可能会导致在调用 Stop 方法后引发 Elapsed 事件。
我有一个运行特定时间的计时器,然后经过并设置一个标志。有时我想停止计时器并重新启动它。
目前,当我尝试停止计时器时,经过的事件仍然会触发(有时),所以我的标志是在我不希望的时候设置的。
我如何停止标志并确保 elapsed 事件不会触发?
**编辑**
在事件处理程序中,我尝试在运行代码之前检查计时器的状态以确保其已启用,并且我还尝试在停止计时器时设置一个标志并在运行代码之前检查该标志。
没有工作
【问题讨论】:
-
在设置标志之前尝试测试定时器状态。
-
您可以随时处理当前计时器并创建一个新计时器以防止旧事件触发。
-
我遇到了你提到@CSharpDev的同样问题,你在这方面有什么进展吗?
标签: c# winforms multithreading timer