等候控制代碼
更新:2007 年 11 月
WaitHandle 類別會封裝 Win32 同步處理控制代碼,並用來表示在允許多個等候作業的執行階段中的所有同步處理物件。如需等候控制代碼和其他同步處理物件的比較,請參閱同步處理原始物件概觀。
WaitHandle 類別本身是抽象,除了衍生類別之外,它還有一些靜態方法可啟用多個事件上的等候。衍生自 WaitHandle 的類別包括下列項目:
EventWaitHandle 類別和它的衍生類別 AutoResetEvent 以及 ManualResetEvent。EventWaitHandle 類別是 .NET Framework 2.0 版中新增的。請參閱 EventWaitHandle、AutoResetEvent 和 ManualResetEvent。
由於 WaitHandle 類別衍生自 MarshalByRefObject,所以這些類別可用在跨應用程式定義域的界限內同步處理執行緒的活動。
執行緒可以在個別等候控制代碼上封鎖,其方式是呼叫執行個體方法 WaitOne。此外,WaitHandle 類別已經有多載的靜態方法會等候到等候控制代碼的指定之集合中的全部都收到信號為止 (WaitAll),或等候到等候控制代碼的指定之集合中有任何一個收到信號為止 (WaitAny)。這些方法的多載會提供逾時間隔來放棄等候,也會提供機會來結束同步處理內容之後,再進入等候,讓其他執行緒使用此同步處理內容。
在 .NET Framework 2.0 版中,等候控制代碼也有靜態 SignalAndWait 方法,此方法可讓執行緒向一個等候控制代碼發出信號,然後立即等候另一個,就像是不可部分完成的作業 (Atomic Operation) 一樣。
WaitHandle 的衍生類別的差異之處,在於其執行緒相似性。事件等候控制代碼 (EventWaitHandle、AutoResetEvent 和 ManualResetEvent) 和號誌 (Semaphore) 並沒有執行緒相似性。任何執行緒都可以向事件等候控制代碼或號誌發出信號;另一方面,Mutex 則有執行緒相似性。主控 Mutex 的執行緒必須釋放它;如果執行緒在它未主控的 Mutex 上呼叫 ReleaseMutex 方法,則會擲回例外狀況。