ManualResetEvent 和 ManualResetEventSlim

System.Threading.ManualResetEvent 类表示一个本地等待处理事件,在该类收到信号后必须手动重置该事件。 此类表示其基类 System.Threading.EventWaitHandle 的一种特殊情况。 有关手动重置事件的用法和功能,请参见 EventWaitHandle 概念文档。

在调用 ManualResetEvent 对象的 EventWaitHandle.Reset 方法之前,该对象始终保持已收到信号的状态。 在对象状态为已收到信号的期间,可以释放任意多正在等待的线程,或是在事件收到信号后处理事件的线程。 ManualResetEvent 对应于 Win32 CreateEvent 调用,它对 bManualReset 参数指定 true。

在 .NET Framework 4 版中,当等待时间预计非常短时,并且当事件不会跨越进程边界时,可使用 System.Threading.ManualResetEventSlim 类以获得更好的性能。当等待事件变为已发出信号状态的过程中,ManualResetEventSlim 短时间内会使用繁忙旋转。 当等待时间很短时,旋转的开销相对于使用等待句柄来进行等待的开销会少很多。 但是,如果事件在某个时间段内没有变为已发出信号状态,则 ManualResetEventSlim 会采用常规的事件处理等待。

请参见

概念

等待句柄

AutoResetEvent

Semaphore 和 SemaphoreSlim

其他资源

托管线程处理

线程处理对象和功能

SpinWait