如何在C#中只引发一个Timer事件?
如何让计时器事件一次触发一个。 例如,我有一个计时器,每10分钟发一次事件。 引发的事件需要10分钟或更长时间才能完成执行。 我希望计时器在事件结束后重置。 换句话说,我不想在任何时候提出超过1个事件的实例。
通常我所做的是让我的事件在引发时停止计时器,然后在事件处理完成时重新启动计时器:
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 */ }
现在我的计时器将在完成该过程后再次启动
使用System.Timers.Timer而不是线程
将AutoReset设置为false。
然后在完成后再次启动它。
为了提高效率或逻辑,可能很难阻止计时器。 以下代码同步跳过事件。
static readonly object key = new object(); void TimerHandler(object sender, TimerElapsedEventArgs e) { if(Monitor.TryEnter(key)) { try { //do your stuff } finally { Montitor.Exit(key); } } }