假设我有一个通过.ShowDialog()方法打开的表单。
在某些时候,我会将一些事件处理程序附加到表单上的某些控件上。
e.g。
// 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事件时执行此操作。
e.g。
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)
感谢。
答案 0 :(得分:18)
在这种情况下,您不需要删除处理程序,因为表单外部的代码都没有引用表单及其按钮,因此整个对象图将被垃圾回收。
答案 1 :(得分:3)
不,您不需要从正在关闭的表单上的控件中删除事件处理程序。他们将全部放在一起。
您可能正在考虑需要删除事件处理程序的网页,以避免浏览器中的内存泄漏。