2012-06-13 11 views
6

मैं Button की एक सूची है, और मैं प्रत्येक बटन के लिए एक ईवेंट हैंडलर जोड़ें:क्या मुझे इवेंट हैंडलर को हटा देना चाहिए?

List<Button> buttons = new List<Button>(); 

for (int i = 0; i < 10; i++) 
{ 
    Button btn = new Button(); 
    btn.Click = new RoutedEventHandler(OnbtnClick); 
    buttons.Add(btn); 
} 

तो मैं सूची को साफ़:

/* Have I to remove all events here (before cleaning the list), or not? 
foreach (Button btn in buttons) 
    btn.Click -= new RoutedEventHandler(OnbtnClick); 
*/ 

buttons.Clear(); 
+0

मैं गलत हो सकता था, लेकिन मुझे विश्वास नहीं है btn.Click - = new routedEventHandler (OnbtnClick); यहां तक ​​कि हैंडलर को भी हटा देता है, क्योंकि आप मूल जोड़े गए हैंडलर के बजाय नए ऑपरेटर का उपयोग कर रहे हैं। –

+2

@KDiTraglia यह एक वैध वाक्यविन्यास है, [यह] देखें (http://msdn.microsoft.com/en-us/library/aa645739 (v = vs.71) .aspx) ट्यूटोरियल। – gliderkite

+0

@gliderkite आह मेरी गलती, मैंने सोचा कि मुझे कहीं पढ़ना याद है कि यह काम नहीं करता है। –

उत्तर

5

जब आप सूची आप स्पष्ट सभी संदर्भों को स्पष्ट उनके साथ हैंडलर। एक बार आपके हैंडलर गुंजाइश छोड़ देते हैं (जो कहता है कि जब समारोह आखिरकार निकलता है और किसी ऑब्जेक्ट के बनाए गए हैंडलर के संदर्भ नहीं होते हैं), कचरा कलेक्टर सभी संबंधित स्मृति (पाठ्यक्रम के अपने शेड्यूल पर) को हटाने के लिए चारों ओर मिल जाएगा।

तो नहीं, आपको हैंडलर मैन्युअल रूप से हटाने की आवश्यकता नहीं है।

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

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