2011-03-11 5 views
6

हाय निपटान कैसे जब मैं निम्नलिखित कोड का उपयोग करें:ManualResetEvent

myManualResetEvent.Dispose(); 

संकलक इस त्रुटि देता है निपटान करने या रनटाइम पर सही तरीका यह कुछ scenerios में दुर्घटनाग्रस्त हो सकता है।

धन्यवाद।

+0

मैं वहाँ कुछ अपने उदाहरण कोड के साथ गलत हो सकता है लगता है। यदि कंपाइलर सिस्टम को देता है। थ्रेडिंग। वाइटहैंडल। डिस्प्ले (बूल) 'इसके सुरक्षा स्तर के कारण पहुंच योग्य नहीं है। " त्रुटि आपको या तो myManualResetEvent का उपयोग करना था। (सही) का पर्दाफाश करें; या myManualResetEvent.Dispose (झूठा); myManualResetEvent नहीं। उद्देश्य(); –

उत्तर

16

.NET बेस कक्षा लाइब्रेरी के डिजाइनर explicit interface implementation का उपयोग कर Dispose विधि लागू करने का फैसला:

private void IDisposable.Dispose() { ... } 

Dispose विधि निजी है और इसे कॉल करने का एकमात्र तरीका ऑब्जेक्ट को IDisposable पर खोजना है जैसा आपने पाया है।

कारण यह हो जाने पर कुछ में Dispose विधि का वर्णन करता है कि बेहतर कैसे वस्तु निपटान किया जाता है के नाम अनुकूलित करने के लिए है। एक ManualResetEvent के लिए अनुकूलित विधि Close तरीका है।

एक ManualResetEvent निपटान करने के लिए आपके पास दो अच्छे विकल्प हैं। MSDN पर अप्रबंधित संसाधन ऊपर साफ करने के लिए

var myManualResetEvent = new ManualResetEvent(false); 
... 
// This will dispose the object. 
myManualResetEvent.Close(); 

आप डिजाइन दिशानिर्देश कार्यान्वयन अंतिम रूप में खंड Customizing a Dispose Method Name में और अधिक पढ़ सकते हैं और निपटान कर सकते हैं:: IDisposable का उपयोग करना:

using (var myManualResetEvent = new ManualResetEvent(false)) { 
    ... 
    // IDisposable.Dispose() will be called when exiting the block. 
} 

या Close बुला

Occasionally a domain-specific name is more appropriate than Dispose . For example, a file encapsulation might want to use the method name Close . In this case, implement Dispose privately and create a public Close method that calls Dispose .

3

WaitHandle.Close

This method is the public version of the IDisposable.Dispose method implemented to support the IDisposable interface.

2

the documentation, WaitHandle.Dispose() और WaitHandle.Close() के अनुसार बराबर हैं। IDisposable इंटरफ़ेस हालांकि बंद करने की अनुमति देने के लिए मौजूद है। मैन्युअल रूप से (जैसे एक ManualResetEvent के रूप में) एक WaitHandle को बंद करने के लिए, आप बस Close बजाय सीधे Dispose उपयोग कर सकते हैं:

WaitHandle.Close

[...] This method is the public version of the IDisposable.Dispose method implemented to support the IDisposable interface.

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