2012-06-13 7 views
6

Ben Button bir listesi var ve ben her düğme için bir olay işleyicisi ekleyin:Bir olay işleyicisini kaldırmalı mıyım?

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

Sonra listesini temizlemek:

/* 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

Yanlış olabilirdim ama btn.Click - = new RoutedEventHandler (OnbtnClick); Özgün işleyici yerine yeni işleci kullandığınızdan, işleyiciyi kaldırır. –

+2

@KDiTraglia Geçerli bir sözdizimi, bkz. [This] (http://msdn.microsoft.com/en-us/library/aa645739 (v = vs.71) .aspx) eğitimi. – gliderkite

+0

@gliderkite benim hatam, işe yaramayacağı bir yerde okumayı hatırlıyorum sanıyordum. –

cevap

5

Eğer listesine net tüm başvuruları temizlediğinizde işleyicileri onlarla birlikte. İşleyicileriniz kapsam dışına çıktığında (yani işlev son olarak çıktığında ve oluşturulan nesneler için hiçbir nesnenin referansı olmadığında), Çöp Toplayıcı ilgili tüm belleği (tabii ki kendi programında) kaldırmak üzere olacak.

Hayır, işleyicileri el ile silmeniz gerekmez.