मुझे पता है कि जब आप किसी ऑब्जेक्ट को माउस के संलग्न ईवेंट में पंजीकृत करते हैं, तो आपके पास मेमोरी लीक होती है। यही कारण है कि आपको WeakEvent pattern का उपयोग करने की आवश्यकता है।कैसे अंतर्निहित WPF नियंत्रण अपने ईवेंट हैंडलर को एक संलग्न ईवेंट में प्रबंधित करते हैं?
मुझे इस पैटर्न के साथ कोई समस्या है: यदि आप इसका उपयोग करना चाहते हैं, तो आप XAML कोड में अपने हैंडलर को परिभाषित नहीं कर सकते हैं।
मेरे लिए, इसका मतलब है कि इस तरह से हर कोड लीक:
<SomeControl Mouse.MouseDown="MyHandler" />
जब तक आप कोड में स्पष्ट रूप से अपने प्रबंधक को निकाल (और मुझे संदेह है कि कोई भी व्यक्ति उस करता है)। अब वहाँ कुछ मुझे समझ नहीं आता है:
<Button Click="MyHandler" />
इस कोड को किसी भी तरह कहीं बटन पर क्लिक पता लगाने के लिए Mouse.MouseDown घटना का उपयोग करें। परावर्तक के साथ कुछ शोध के साथ, मैंने पाया कि यह घटना UIElement क्लास के माउसडाउन का उपयोग करती है। और जब मैं UIElement के कोड को पढ़ता हूं तो मुझे समझ में नहीं आ रहा है: कोई WeakEventManager नहीं है!
क्या कोई मुझे बता सकता है कि UIElement माउस से घटनाओं को कैसे प्राप्त करता है। रिसाव के बिना माउसडाउन?
मैं आपके साथ सहमत हूं, हालांकि XAML में एक अटैचमेंट ईवेंट में हैंडलर (मैं नियंत्रण 'घटनाओं के बारे में बात नहीं करता हूं लेकिन माउस.माउसडाउन के रूप में ईवेंट) रिसाव कर सकता है, क्योंकि इसमें हमेशा एक संदर्भ होता है। आंतरिक रूप से, बटन क्लास माउस का उपयोग करता है। माउसडाउन ईवेंट (UIElement विशिष्ट होना) और मुझे नहीं पता कि यह क्यों रिसाव नहीं करता है। –
अच्छा बिंदु। संलग्न घटनाएं बाहरी संदर्भ हैं। –