原子定时器回调设计问题

时间:2011-05-03 14:01:48

标签: c# timer callback

我想调用计时器回调一次,直到完成任务。例如,如果计时器间隔为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);
}

1 个答案:

答案 0 :(得分:3)

这个实际上很简单。初始化计时器时,将AutoReset属性设置为false。

_timer.AutoReset = false;

然后在事件处理程序结束时调用:

_timer.Start();