我有一个WaitHandle,我想知道如何检查WaitHandle是否已经设置。如何检查WaitHandle是否已设置?
注意:我可以添加一个bool变量,并且无论何时使用Set()方法将该变量设置为true,但此行为必须在WaitHandle的某个位置构建。
感谢您的帮助!
我有一个WaitHandle,我想知道如何检查WaitHandle是否已经设置。如何检查WaitHandle是否已设置?
注意:我可以添加一个bool变量,并且无论何时使用Set()方法将该变量设置为true,但此行为必须在WaitHandle的某个位置构建。
感谢您的帮助!
如果millisecondsTimeout是零,该方法不会阻塞。它测试等待句柄的状态并立即返回。
*惭愧*谢谢! – 2010-07-22 20:30:35
+1好的清楚答案。虽然我会建议将“尝试”更改为“使用”,但不错。就目前而言,你似乎不确定你的答案。 – 2010-07-22 20:31:46
唯一的问题是,对于一些WaitHandles(自动重置事件,信号量),就绪状态实际上将通过等待来重置。 – 2010-07-24 18:21:26
使用上WaitHandle
的Wait...
方法,需要一个超时值,如WaitOne
一个,并通过为0
超时可以使用WaitOne(int millisecondsTimeout, bool exitContext)方法和在0通为时间跨度。它会立即返回。
bool isSet = yourWaitHandle.WaitOne(0, true);
他们为什么要使用带'exitContext'值的引用?考虑到有些方法不需要这个领域,你应该解释它的必要性。 – 2010-07-22 20:34:30
VS2005的在线帮助只显示WaitOne(),WaitOne(int,bool)和WaitOne(TimeSpan,bool)。所以,很可能他们没有找到WaitOne(int) – 2011-11-15 16:09:57
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-22 20:31:07
@Jeff当然,这只是一个很难的事情了一些示例代码来命名,今天我已经写了很多代码。 – 2010-07-22 20:33:32
@chibacity:写事件比事件更容易。 'waitHandle','resetEvent','mre','myEvent'。名单是无止境的,它会让你的例子更好。 – 2010-07-22 20:35:46
我的回答是之前SwDevMan唯一秒,这是更清晰,包括文档报价,所以我删除它。但是,我仍然想知道:“您是否正在处理可能已被重置的自动重置事件,或者测试代码是否不能重置?” – 2010-07-24 18:19:58