Удаление обработчиков событий - событие FormClosing или метод Dispose () - PullRequest
13 голосов
/ 02 мая 2010

Предположим, у меня есть форма, открытая с помощью метода .ShowDialog ().

В какой-то момент я присоединяю некоторые обработчики событий к некоторым элементам управления в форме.

, например

// Attach radio button event handlers.
this.rbLevel1.Click += new EventHandler(this.RadioButton_CheckedChanged);
this.rbLevel2.Click += new EventHandler(this.RadioButton_CheckedChanged);
this.rbLevel3.Click += new EventHandler(this.RadioButton_CheckedChanged);

Когда форма закрывается, мне нужно удалить эти обработчики, верно?

В настоящее время я делаю это, когда происходит событие FormClosing.

1012 *, например *

private void Foo_FormClosing(object sender, FormClosingEventArgs e)
{
    // Detach radio button event handlers.
    this.rbLevel1.Click -= new EventHandler(this.RadioButton_CheckedChanged);
    this.rbLevel2.Click -= new EventHandler(this.RadioButton_CheckedChanged);
    this.rbLevel3.Click -= new EventHandler(this.RadioButton_CheckedChanged);
}

Однако я видел несколько примеров удаления обработчиков в методе Dispose ().

Есть ли лучший способ сделать это?

(Использование C #, Winforms, .NET 2.0)

Спасибо.

Ответы [ 2 ]

18 голосов
/ 02 мая 2010

В этом случае вам не нужно удалять обработчики, потому что ни на форму, ни на ее кнопки не ссылается код, внешний по отношению к форме, и поэтому весь граф объектов будет собираться мусором.

3 голосов
/ 02 мая 2010

Нет, вам не нужно удалять обработчики событий из элементов управления закрываемой формы. Все они будут уничтожены вместе.

Возможно, вы думаете о веб-страницах, где необходимо удалить обработчики событий, чтобы избежать утечек памяти в браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...