2012-06-13 18 views
6

Ho una lista di Button, e aggiungo un gestore di eventi per ogni pulsante:Devo rimuovere un gestore di eventi?

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

Poi ho cancellare l'elenco:

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

Potrei sbagliarmi, ma non credo btn.Click - = new RoutedEventHandler (OnbtnClick); rimuove anche il gestore, poiché si sta utilizzando il nuovo operatore invece del gestore aggiunto originale. –

+2

@KDiTraglia È una sintassi valida, si veda [questo] (http://msdn.microsoft.com/en-us/library/aa645739 (v = vs.71) .aspx) tutorial. – gliderkite

+0

@gliderkite ah mio errore, pensavo di ricordare di aver letto da qualche parte che non funzionava. –

risposta

5

Quando si cancella la lista di cancellare tutti i riferimenti al gestori insieme a loro. Una volta che i gestori lasciano l'ambito (vale a dire quando la funzione termina e nessun oggetto ha riferimenti ai gestori creati), Garbage Collector si occuperà di rimuovere tutta la memoria correlata (ovviamente sul proprio programma).

Quindi no, non è necessario eliminare manualmente i gestori.

Problemi correlati