我想调用计时器回调一次,直到完成任务。例如,如果计时器间隔为5分钟且任务可能在2-20分钟内完成,则如果上一个任务未完成,则新线程不会进入回调方法。
目前我通过一个易变的计数器来做这件事但对我来说没有意义。应该有一个最好的做法。示例代码:
private volatile int _counter = 0;
private readonly object _syncLock = new object();
void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
lock(syncLock)
{
if (_counter > 0)
return;
else
Interlocked.Increment(ref _counter);
}
// Method body
Interlocked.Decrement(ref _counter);
}
答案 0 :(得分:3)
这个实际上很简单。初始化计时器时,将AutoReset
属性设置为false。
_timer.AutoReset = false;
然后在事件处理程序结束时调用:
_timer.Start();