我正在使用一个 ManualResetEvent
实例来控制线程访问资源,但我遇到了一些问题。有没有人知道在调试期间如何查找对象的状态?
也就是说,我想知道 ManualResetEvent
是否当前阻止任何线程,甚至可能知道它阻止了多少个线程以及哪些线程被阻止了。
我正在使用一个 ManualResetEvent
实例来控制线程访问资源,但我遇到了一些问题。有没有人知道在调试期间如何查找对象的状态?
也就是说,我想知道 ManualResetEvent
是否当前阻止任何线程,甚至可能知道它阻止了多少个线程以及哪些线程被阻止了。
使用零超时值对事件执行WaitOne
操作。
如果事件被设置,它将返回true,如果超时,则返回false。 换句话说,true -> 事件已设置,false -> 事件未设置。
以下是可工作的代码:
private ManualResetEvent pause = new ManualResetEvent(false);
pause.WaitOne(); // caller thread pauses
pause.Set(); // another thread releases paused thread
// Check pause state
public bool IsPaused { get { return !pause.WaitOne(0); } }
mreVariable.WaitOne(0)
的调用并查看其评估结果。
注意:不应将此用于 AutoResetEvents,因为这可能会更改实际状态。
ManualResetEventSlim
,其中包括提供了一个被认为比WaitOne(0)
更快的IsSet
方法。 - Roman Starkov