8

トリガーが発生してドアが 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 秒後にすべてが閉じます。タイマーを「リセット」するにはどうすればよいですか?

4

2 に答える 2

14

タイマーを廃棄しないでください。ドアを開けるたびに変更してください。

// Trigger again in 5 seconds. Pass -1 as second param to prevent periodic triggering.
_timer.Change(5000, -1); 
于 2013-06-14T13:19:44.403 に答える