重置线程计时器,如果它被第二次调用

本文关键字:第二次 调用 如果 线程 计时器 | 更新日期: 2023-09-27 18:18:19

我正在尝试创建一个触发发生的系统,因此门打开5秒,然后再次关闭。我正在使用Threading。定时器,使用:

OpenDoor();
System.Threading.TimerCallback cb = new System.Threading.TimerCallback(OnTimedEvent);
_timer = new System.Threading.Timer(cb, null, 5000, 5000);
...
void OnTimedEvent(object obj)
{
    _timer.Dispose();
    log.DebugFormat("All doors are closed because of timer");
    CloseDoors();
}

当我打开某扇门时,计时器启动。5秒后,所有东西再次关闭。

但是当我打开一扇门,等2秒,然后打开另一扇门,所有的门都在3秒后关闭。我如何"重置"定时器?

重置线程计时器,如果它被第二次调用

不处理定时器,只需在每次打开门时更改它,例如

// Trigger again in 5 seconds. Pass -1 as second param to prevent periodic triggering.
_timer.Change(5000, -1); 

你可以这样做:

// First off, initialize the timer
_timer = new System.Threading.Timer(OnTimedEvent, null,
    Timeout.Infinite, Timeout.Infinite);
// Then, each time when door opens, start/reset it by changing its dueTime
_timer.Change(5000, Timeout.Infinite);
// And finally stop it in the event handler
void OnTimedEvent(object obj)
{
    _timer.Change(Timeout.Infinite, Timeout.Infinite);
    Console.WriteLine("All doors are closed because of timer");
}