更新:2011 年 4 月
WaitHandle 类封装 Win32 同步句柄,并用于表示运行时中所有允许执行多个等待操作的同步对象。 有关等待句柄与其他同步对象的比较,请参见同步基元概述。
WaitHandle 类本身是抽象类。 除派生类之外,它还具有许多对多个事件启用等待的静态方法。 从 WaitHandle 派生的类包括:
EventWaitHandle 类及其派生类、AutoResetEvent 和 ManualResetEvent。 EventWaitHandle 类是 .NET Framework 2.0 版中的新类。 请参见 EventWaitHandle、AutoResetEvent、CountdownEvent 和 ManualResetEvent。
Semaphore 类是 .NET Framework 2.0 版中的新类。 请参见 Semaphore 和 SemaphoreSlim。
由于 WaitHandle 类派生自 MarshalByRefObject,所以这些类可用于跨应用程序域边界同步线程的活动。
线程可以通过调用实例方法 WaitOne 在单个等待句柄上阻塞。 此外,WaitHandle 类重载了静态方法,以等待所有指定的等待句柄集都已收到信号 (WaitAll),或等待某一指定的等待句柄集收到信号 (WaitAny)。 这些方法的重载提供了放弃等待的超时间隔、在进入等待之前退出同步上下文的机会,并允许其他线程使用同步上下文。
在 .NET Framework 2.0 版中,等待句柄还具有静态 SignalAndWait 方法,它允许线程发送一个等待句柄信号并立即等待另一个。
WaitHandle 的派生类具有不同的线程关联。 事件等待句柄(EventWaitHandle、AutoResetEvent 和 ManualResetEvent)以及信号量没有线程关联。 任何线程都可以发送事件等待句柄或信号量的信号。 另一方面,mutex 没有线程关联。 拥有 mutex 的线程必须将其释放;如果线程在它不拥有的 mutex 上调用 ReleaseMutex 方法,则将引发异常。
请参见
概念
其他资源
EventWaitHandle、AutoResetEvent、CountdownEvent 和 ManualResetEvent
修订记录
日期 |
修订记录 |
原因 |
---|---|---|
2011 年 4 月 |
更正:WaitHandle.SignalAndWait 方法不是原子的。 |
客户反馈 |