我System.Timers
在我的程序中使用。
正如我们所知,每个间隔都会创建新线程来处理OnTimedEvent
.
如果前一个线程仍在运行,我正在寻找强制系统等待创建新线程的方法。
我OnTimedEvent
执行一些方法,我想等到方法完成
知道怎么做吗?
我System.Timers
在我的程序中使用。
正如我们所知,每个间隔都会创建新线程来处理OnTimedEvent
.
如果前一个线程仍在运行,我正在寻找强制系统等待创建新线程的方法。
我OnTimedEvent
执行一些方法,我想等到方法完成
知道怎么做吗?
Elapsed
在触发事件时不会创建新线程的意义上,您是错误的。该事件将在 .NET 线程池上引发,因此任意线程将对其进行处理。
做你想做的事情的一种方法是Stop
在你的事件处理程序开始时使用计时器,并在Start
它完成后再次使用它。像这样:
var timer = new System.Timers.Timer(1000);
timer.Elapsed += HandleTimerElapsed;
timer.Start();
...
private void HandleTimerElapsed(object s, ElapsedEventArgs e)
{
var t = (System.Timers.Timer)s;
t.Stop();
try {
... do some processing
}
finally { // make sure to enable timer again
t.Start();
}
}
另一个选项是将AutoReset
计时器的属性设置为 false。这样计时器只会被提升一次。然后,您可以Start
在希望它重新开始时调用。因此,上面的代码将更改为timer.AutoReset = false;
在开头包含 a ,然后您无需Stop
在处理程序内部调用。这更安全一点,因为上述方法可能存在竞争条件,即如果系统处于负载状态,您的处理程序可能无法保证在计时器再次结束之前执行。