2010-07-22 16 views
32

मेरे पास WaitHandle है और मैं यह जानना चाहता हूं कि वेटहैंडल पहले ही सेट हो चुका है या नहीं।कैसे प्रतीक्षा करें कि वेटहैंडल सेट किया गया था या नहीं?

नोट: मैं एक बूल वैरिएबल जोड़ सकता हूं और जब भी सेट() विधि का उपयोग किया जाता है तो वेरिएबल को सत्य पर सेट किया जाता है, लेकिन यह व्यवहार कहीं भी WaitHandle में बनाया जाना चाहिए।

मदद के लिए धन्यवाद!

+0

मेरा जवाब SwDevMan के पहले ही सेकंड जो बहुत स्पष्ट है था और प्रलेखन शामिल उद्धरण, तो मैं इसे हटा रहा हूँ। हालांकि, मुझे अभी भी आश्चर्य है "क्या आप एक ऑटो-रीसेट ईवेंट से निपट रहे हैं जो पहले ही रीसेट हो चुका है, या परीक्षण कोड रीसेट नहीं होना चाहिए?" –

उत्तर

47

WaitHandle.WaitOne(0)

तो millisecondsTimeout शून्य है, विधि ब्लॉक नहीं करता की कोशिश करो। यह प्रतीक्षा संभाल की स्थिति का परीक्षण करता है और तुरंत लौटता है।

+1

* शर्मिंदा * धन्यवाद! –

+0

+1 अच्छा स्पष्ट जवाब। अच्छा और सरल, हालांकि मैं "उपयोग" करने के लिए "कोशिश करें" को बदलने का सुझाव दूंगा। जैसा कि यह खड़ा है, आप अपने उत्तर के बारे में अनिश्चित लगते हैं। –

+3

एकमात्र मुद्दा यह है कि कुछ WaitHandles (ऑटो-रीसेट इवेंट, सेमफोर) के लिए, तैयार स्थिति वास्तव में प्रतीक्षा करके रीसेट हो जाएगी। –

2

उपयोग Wait... ऐसे WaitOne के रूप में है कि एक टाइमआउट मान लेता है WaitHandle पर तरीकों में से एक है, और पारित 0.

1

का समय समाप्त आप WaitOne(int millisecondsTimeout, bool exitContext) विधि का उपयोग करें और समयावधि के लिए 0 में पारित कर सकते हैं। यह तुरंत वापस आ जाएगा।

bool isSet = yourWaitHandle.WaitOne(0, true); 
+0

से लिया गया उद्धरण उन लोगों का उपयोग क्यों करना चाहिए जो 'exitContext' मान लेते हैं? इस बात पर विचार करते हुए कि ऐसे विकल्प हैं जिन्हें इस क्षेत्र की आवश्यकता नहीं है, आपको इसकी आवश्यकता को समझाना चाहिए। –

+0

वीएस2005 के लिए ऑनलाइन सहायता केवल वेटऑन(), वेटऑन (इंट, बूल), और वेटऑन (टाइमस्पेन, बूल) दिखाती है। तो, ऐसा लगता है कि उन्हें WaitOne (int) –

5
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)); 

आउटपुट:

सेट है: गलत

सेट है: यह सच है

+0

नहीं मिला है चर के लिए एक कीवर्ड का उपयोग क्यों करें? यह अनावश्यक है और आपके उत्तर को पढ़ने के लिए कठिन बनाता है। –

+0

@ जेफ निश्चित रूप से, कुछ नमूना कोड के लिए नाम देने के लिए बस एक कठिन बात है, और मैं आज बहुत सारे कोड लिख रहा हूं। –

+0

@ चतुरता: घटना के अलावा कुछ और लिखना आसान है। 'प्रतीक्षा करेंडल',' resetEvent', 'mre',' myEvent'। सूची अंतहीन है और यह आपके उदाहरण को बेहतर बना देगा। –

संबंधित मुद्दे

 संबंधित मुद्दे