C# – 删除事件处理程序 – FormClosing事件或Dispose()方法

假设我有一个通过.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事件被触发时,我正在这样做.

例如

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)

谢谢.

最佳答案
在这种情况下,您不需要删除处理程序,因为窗体和窗体的外部代码都不被引用,因此整个对象图将被垃圾回收.

转载注明原文:C# – 删除事件处理程序 – FormClosing事件或Dispose()方法 - 代码日志