43

我有一个WaitHandle,我想知道如何检查 WaitHandle 是否已经设置。

注意:我可以添加一个 bool 变量,并且每当使用 Set() 方法时将变量设置为 true,但是这种行为必须在 WaitHandle 的某个地方构建。

感谢帮助!

4

4 回答 4

61

试试WaitHandle.WaitOne(0)

如果毫秒超时为零,则该方法不会阻塞。它测试等待句柄的状态并立即返回。

于 2010-07-22T20:27:43.507 回答
7
const int DoNotWait = 0;
                          
ManualResetEvent waitHandle = new ManualResetEvent(false);                   

Console.WriteLine("Is set:{0}", waitHandle.WaitOne(DoNotWait));
         
waitHandle.Set(); 

Console.WriteLine("Is set:{0}", waitHandle.WaitOne(DoNotWait));   

输出:

设置:假

设置:真

于 2010-07-22T20:30:08.723 回答
2

使用具有超时值的Wait...方法之一WaitHandle,例如WaitOne,并传递超时 0。

于 2010-07-22T20:28:09.753 回答
1

您可以使用WaitOne(int millisecondsTimeout, bool exitContext)方法并为时间跨度传入 0。它会立即返回。

bool isSet = yourWaitHandle.WaitOne(0, true);
于 2010-07-22T20:28:40.500 回答