0

我创建了创建 System.Timers.Timer 的函数,并在新线程中调用了新函数。但是我的第一个函数不等待 timer.Stop 执行并在调用 timer.Start() 后返回值

当我在函数返回之前添加此代码时:

while(timer.Enabled)
{
Thread.Sleep(2000);
}

计时器函数永远不会被调用:/

我做错了什么?

4

1 回答 1

0

如果您查看 MSDN 文档,您会看到以下注释(我怀疑这是正在发生的事情,但如果没有其他代码,则无法分辨):

事件处理方法可能在另一个线程调用 Stop 方法或将 Enabled 属性设置为 false 的同时在一个线程上运行。这可能会导致在计时器停止后引发 Elapsed 事件。Stop 方法的示例代码显示了避免这种竞争条件的一种方法。

http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

于 2012-10-16T02:28:50.547 回答