我有一個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