2012-06-13 7 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 Это допустимый синтаксис, см. [This] (http://msdn.microsoft.com/en-us/library/aa645739 (v = vs.71) .aspx). – gliderkite

+0

@ gliderkite ах моя ошибка, я думал, что помню, где-то читал, что это не сработало. –

ответ

5

При очистке списка вы очистить все ссылки на обработчиков вместе с ними. После того, как ваши обработчики покинут область действия (то есть, когда функция, наконец, выйдет, и никакие объекты не будут ссылаться на созданные обработчики), сборщик мусора обойдется с удалением всей связанной памяти (по собственному графику, конечно).

Нет, вам не нужно вручную удалять обработчики.

Смежные вопросы