2010-02-14 6 views

Antwort

6

Anstatt schlafen zu müssen, müssen Sie eine EventWaitHandle erstellen und WaitOne mit einem Timeout verwenden.

Wenn Sie möchten, dass der Thread früher aufwacht, legen Sie das Ereignis einfach auf Signalisierung fest.

Erstellen Sie zunächst die EventWaitHandle:

wakeUpEvent = new EventWaitHandle(false, EventResetMode.ManualReset); 

Dann in Ihrem Thread:

wakeUpEvent.WaitOne(new TimeSpan(1, 0, 0)); 

Wenn das Hauptprogramm will den Thread zu früh aufwachen:

wakeUpEvent.Set(); 

Hinweis: Sie können das Ereignis entweder auf automatisches Zurücksetzen oder manuelles Zurücksetzen setzen. Automatisches Zurücksetzen bedeutet, dass WaitOne, sobald es vom Ereignis zurückkehrt, es auf nicht signalisiert zurücksetzt. Dies ist nützlich, wenn Sie sich in einer Schleife befinden und mehrmals signalisieren.

+0

Wenn Sie möchten, dass der Thread automatisch aufhört und manuell schreibt: wakeUpEvent = new EventWaitHandle (false, EventResetMode.ManualReset | EventResetMode.AutoReset); Wenn der Timer beendet wird, wird der Thread wieder funktionieren und Sie können ihn auch manuell stoppen. – aharon

1

Ein Thread kann gestartet werden, indem auf ein WaitObject gewartet wird und der andere Thread die Set-Methode darauf aufruft. Schau dir die WaitHandle.WaitOne method an.

Here's Artikel, der ebenfalls hilfreich sein kann.

Verwandte Themen