如何使计时器事件只触发一次。 例如,我有一个计时器,每10分钟引发一个事件。 所引发的事件需要10分钟或更长时间才能完成执行。 我希望在事件完成后重置计时器。 换句话说,在任何时候我都不想引发超过1个事件实例。
使用 System.Timers.Timer 而不是 Threading 计时器。
将 AutoReset 设置为 false。
完成后再次启动它。
private void timerHandler(object sender, TimerElapsedEventArgs e)
{
Timer timer = (Timer)sender;
timer.Stop();
RunProcess();
timer.Start();
}
public void RunProcess()
{
/* Do stuff that takes longer than my timer interval */
}
为了提高效率或逻辑,停止计时器可能会很困难。以下代码同步跳过事件。
static readonly object key = new object();
void TimerHandler(object sender, TimerElapsedEventArgs e)
{
if(Monitor.TryEnter(key))
{
try
{
//do your stuff
}
finally
{
Montitor.Exit(key);
}
}
}
MyTimer.AutoReset = false
。否则,有人可能会忘记手动管理Start()
和Stop()
的调用。 - Onion-Knight