等待句柄

更新:2011 年 4 月

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

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

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

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

在 .NET Framework 2.0 版中,等待句柄还具有静态 SignalAndWait 方法,它允许线程发送一个等待句柄信号并立即等待另一个。

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

请参见

概念

Mutex

Semaphore 和 SemaphoreSlim

其他资源

托管线程处理

线程处理对象和功能

EventWaitHandle、AutoResetEvent、CountdownEvent 和 ManualResetEvent

修订记录

日期

修订记录

原因

2011 年 4 月

更正:WaitHandle.SignalAndWait 方法不是原子的。

客户反馈