`Control.Dispose()`是否删除所有事件注册? [英] Does `Control.Dispose()` remove all event registrations?
问题描述
当我在 System.Windows.Forms.Control
上调用 Dispose()
时,它会自动删除所有事件注册?
When I call Dispose()
on a System.Windows.Forms.Control
, does it automatically remove all event registrations?
例如,以下内容是否足够:
So for example, is the following sufficient:
var button = new Button();
button.Click += someObject.clickHandler;
// ...
button.Dispose();
还是我需要显式注销事件处理程序,例如:
Or do I need to unregister the event handler explicitly, like this:
var button = new Button();
button.Click += someObject.clickHandler;
// ...
button.Click -= someObject.clickHandler;
button.Dispose();
推荐答案
不是,不是。您应该自己删除处理程序。简单测试可以证明这一点。
Nope, It doesn't. You ought to remove the handlers yourself. Simple test can prove that.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
var button = new Button();
button.Click += button_Click;
//Some code
button.Dispose();
button.PerformClick();//Simulate a click event
}
void button_Click(object sender, EventArgs e)
{
MessageBox.Show("Oops! Still alive?");
}
运行上面的代码,您会看到MessageBox弹出,说:糟糕!还活着?这意味着即使我们处置
控件
,处理程序也不会被删除。
Run the above code, You'll see MessageBox popping up saying "Oops! Still alive?" which means handlers are not removed even when we Dispose
the Control
.
请参考 Marc在这里的回答看看这如何影响垃圾回收。
Refer Marc's answer here to see how this can affect Garbage collection.
这篇关于`Control.Dispose()`是否删除所有事件注册?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!