默认情况下,当您创建Win-Form应用程序时,这是由Visual Studio生成的用于处理表单的代码。WinForms和事件处理程序
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
难道这还不够吗?还是我应该注销所有事件,这样的控件将随时被垃圾收集器收集的?
if (disposing && (components != null))
{
myButton.OnClick-= MyFunction; //may be here!!
// ... all events used
components.Dispose();
}
这是否意味着您不负责注销所有事件? – 2012-01-04 21:21:41
@Hans Passant:根据我的经验,如果表单中使用的事件数量有影响,或者过于频繁使用,而不进行'取消订阅',则会导致内存泄漏。 – Tigran 2012-01-04 21:28:41
是的,这就是它的意思。只有当事件源超过事件消费者时才需要它。从来没有一个表格和它的子控件的问题,他们都在同一时间死亡。 SystemEvents类的事件是必须手动取消订阅的事件的示例。 – 2012-01-04 21:31:51