Wait-Handles
Aktualisiert: November 2007
Die WaitHandle-Klasse kapselt Win32-Synchronisierungshandles und wird zur Darstellung aller Synchronisierungsobjekte in der Laufzeit verwendet, die mehrere Wartevorgänge ermöglichen. Ein Vergleich von Wait-Handles mit anderen Synchronisierungsobjekten finden Sie unter Übersicht über Synchronisierungsprimitiven.
Die WaitHandle-Klasse selbst ist abstrakt. Neben abgeleiteten Klassen verfügt sie über eine Reihe statischer Methoden, die für mehrere Ereignisse das Warten ermöglichen. Die folgenden Klassen sind von WaitHandle abgeleitet:
Die Mutex-Klasse. Weitere Informationen finden Sie unter Mutexe.
Die EventWaitHandle-Klasse und die abgeleiteten Klassen AutoResetEvent und ManualResetEvent. Die EventWaitHandle-Klasse ist neu in .NET Framework, Version 2.0. Weitere Informationen finden Sie unter EventWaitHandle, AutoResetEvent und ManualResetEvent.
Die Semaphore-Klasse ist neu in .NET Framework, Version 2.0. Weitere Informationen finden Sie unter Semaphoren.
Da die WaitHandle-Klasse von MarshalByRefObject abgeleitet ist, können mit diesen Klassen die Aktivitäten von Threads über Anwendungsdomänen hinweg synchronisiert werden.
Threads können einen einzelnen Wait-Handle blockieren, indem sie die WaitOne-Instanzmethode aufrufen. Darüber hinaus verfügt die WaitHandle-Klasse über überladene statische Methoden, mit denen gewartet werden kann, bis sämtliche Wait-Handles einer bestimmten Gruppe signalisiert sind (WaitAll) oder bis ein Wait-Handle einer bestimmten Gruppe signalisiert ist (WaitAny). Die Überladungen dieser Methode stellen neben Timeoutintervallen zum Abbrechen des Wartevorgangs eine Möglichkeit zum Beenden eines Synchronisierungskontexts vor Beginn des Wartevorgangs bereit, sodass der Synchronisierungskontext von anderen Threads verwendet werden kann.
In .NET Framework, Version 2.0, verfügen Wait-Handles auch über die statische SignalAndWait-Methode, mit der ein Thread in einem atomaren Vorgang ein Wait-Handle signalisieren und sofort auf ein anderes warten kann.
Die abgeleiteten Klassen von WaitHandle unterscheiden sich in ihrer Threadaffinität. Wait-Handles von Ereignissen (EventWaitHandle, AutoResetEvent und ManualResetEvent) und Semaphore weisen keine Threadaffinität auf. Jeder Thread kann ein Wait-Handle eines Ereignisses oder ein Semaphor signalisieren. Mutexe hingegen weisen Threadaffinität auf. Wenn ein Thread ein Mutex besitzt, muss er dieses freigeben. Wenn ein Thread die ReleaseMutex-Methode für ein Mutex aufruft, das er nicht besitzt, wird eine Ausnahme ausgelöst.