2009-10-29 12 views
5

एक असीमित प्रश्न:एंड इनवोक() - वैकल्पिक या नहीं?

मैं इंटरनेट पर पढ़ रहा हूं और Delegate.EndInvoke() वैकल्पिक के खिलाफ लेखों के बहुत सारे लेख पढ़ रहा हूं। उनमें से अधिकतर लेख 4-5 साल पुराने हैं। मृत लिंक के बहुत सारे।

क्या कोई भी .NET 2.0 में समझा सकता है - EndInvoke() वास्तव में अन्यथा अपरिहार्य स्मृति रिसाव को रोक रहा है, और यदि हाँ कृपया आप यह रिसाव का कारण बता सकते हैं?

एक ही विषय पर: यदि एंडइवोक() वास्तव में एक जरूरी है - मुझे एंडइनवोक() चलाने वाली कॉलबैक विधि का उपयोग करके फायर-एंड-भूल तंत्र को लागू करने का सबसे अच्छा तरीका मिल गया है। मुझे किसी ऐसे व्यक्ति से सुनना अच्छा लगेगा जो अन्यथा सोचता है।

धन्यवाद, हे

उत्तर

8

Delegate.EndInvoke के लिए, आप यह फोन करना चाहिए। Control.EndInvoke के लिए, WinForms टीम ने कहा है कि आप को कॉल करने की आवश्यकता नहीं है। मुझे डब्ल्यूपीएफ के बराबर के बारे में पता नहीं है, लेकिन मुझे लगता है कि ऐसा करने का अच्छा विचार है जब तक कि आपको वास्तव में पर विश्वास करने का अच्छा कारण नहीं है।

मेरे पास threading article में प्रतिनिधियों के लिए कुछ "आग और भूल" कोड है - लगभग आधा रास्ता नीचे ("आग" की खोज)।

+0

अग्नि-एन-भूल का अर्थ क्या है? मैं मान रहा था: 1) यदि आप एक BeginInvoke करते हैं और न तो मतदान का उपयोग करते हैं, हैंडल या कॉलबैक का इंतजार करें, तो यह एक अग्नि-एन-भूल विधि है 2) केवल शून्य रिटर्न विधियों का उपयोग आग-एन-भूलने के लिए किया जा सकता है ताकि आपको आवश्यकता न हो BeginInvoke करने के बाद उपरोक्त में से तीन का उपयोग करने के बारे में चिंता करें। मुझे लगता है कि अगर आप मेमोरी लीक से बचने के लिए कॉलबैक का उपयोग करने का सुझाव देते हैं, तो यह अब अग्नि-एन-भूल नहीं है। –

+0

यह बिल्कुल मेरा सवाल था। अगर दिशानिर्देश हमेशा EndInvoke() का उपयोग करना है तो आग और भूलने के लिए कोई विकल्प नहीं है। थोड़ा अजीब। – tsemer

5

msdn से:

हमेशा अपने अतुल्यकालिक कॉल पूरी करने के EndInvoke कहते हैं।

मैं सलाह देता हूं कि आप दिशानिर्देशों का पालन करें, भले ही यह आज बिना लीक के काम करता है, यह कल बदल सकता है।

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