等待句柄

更新:2007 年 11 月

WaitHandle 类封装 Win32 同步句柄,并用于表示运行库中所有允许执行多个等待操作的同步对象。有关等待句柄与其他同步对象的比较,请参见同步基元概述

WaitHandle 类本身是抽象类。除派生类之外,它还具有许多对多个事件启用等待的静态方法。从 WaitHandle 派生的类包括:

由于 WaitHandle 类派生自 MarshalByRefObject,所以这些类可用于跨应用程序域边界同步线程的活动。

线程可以通过调用实例方法 WaitOne 在单个等待句柄上阻塞。此外,WaitHandle 类重载了静态方法,以等待所有指定的等待句柄集都已收到信号 (WaitAll),或等待某一指定的等待句柄集收到信号 (WaitAny)。这些方法的重载提供了放弃等待的超时间隔、在进入等待之前退出同步上下文的机会,并允许其他线程使用同步上下文。

在 .NET Framework 2.0 版中,等待句柄也具有静态 SignalAndWait 方法,该方法允许线程发送一个等待句柄信号,然后立即等待另一个等待句柄,如同原子操作一样。

WaitHandle 的派生类具有不同的线程关联。事件等待句柄(EventWaitHandleAutoResetEventManualResetEvent)以及信号量没有线程关联。任何线程都可以发送事件等待句柄或信号量的信号。另一方面,mutex 没有线程关联。拥有 mutex 的线程必须将其释放;如果线程在它不拥有的 mutex 上调用 ReleaseMutex 方法,则将引发异常。

请参见

概念

Mutex

信号量

其他资源

托管线程处理

线程处理对象和功能

EventWaitHandle、AutoResetEvent 和 ManualResetEvent