2013-06-14 3 views
4

Я пытаюсь создать систему, в которой срабатывает триггер, чтобы двери открывались в течение 5 секунд, а затем снова закрывались. Я использую Threading.Timer для этого, используя:Сброс таймингового таймера, если он называется второй раз

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 секунды. Как я могу «сбросить» таймер?

ответ

8

Вы можете менять таймер каждый раз, когда вы открываете дверь, например.

mytimer.Change(5000, 0); // reset to 5 seconds 
2

Вы можете сделать что-то вроде этого:

// 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"); 
} 
Смежные вопросы