2012-06-13 14 views
6

tengo una lista de Button, y agrego un controlador de eventos para cada botón:¿Debo eliminar un controlador de eventos?

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

Luego borrar la lista:

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

Podría estar equivocado, pero no creo btn.Click - = new RoutedEventHandler (OnbtnClick); incluso elimina el controlador, ya que está utilizando el nuevo operador en lugar del controlador adicional original. –

+2

@KDiTraglia Es una sintaxis válida, vea [este] (http://msdn.microsoft.com/en-us/library/aa645739 (v = vs.71) .aspx) tutorial. – gliderkite

+0

@gliderkite ah mi error, pensé que recuerdo haber leído en alguna parte que no funcionó. –

Respuesta

5

Cuando se borra la lista de borrar todas las referencias a la manejadores junto con ellos. Una vez que sus manejadores abandonan el alcance (es decir, cuando la función finalmente sale y ningún objeto tiene referencias a los manejadores creados), el recolector de basura se ocupará de eliminar toda la memoria relacionada (en su propio calendario, por supuesto).

Así que no, no es necesario que elimine manualmente los controladores.

Cuestiones relacionadas