匿名方法作为事件处理程序

时间:2018-04-26 09:04:09

标签: c# .net events anonymous-methods

编辑:这个问题关于如何取消订阅活动,因为我知道如果我愿意这样做。问题是在我的特定情况下是否与垃圾收集存在冲突。

在我之前写的一些代码中,我通过匿名方法注册了一个事件(for,由CheckExecution拥有,见下面的代码)。但现在我已经想到,为一个事件分配一个匿名方法是非常邪恶的,因为没有办法从事件中取消注册该方法,对吧?我曾经遇到过一个无法收集垃圾的对象的问题,因为事件仍指向它。

所以我想知道我是否可以在这里遇到麻烦。我的自发反应是“不,因为匿名方法属于MainForm,并且它的生命周期比其isoDataTemp成员”更长。但我不确定。关闭怎么样?匿名方法是否属于MainForm。我很困惑......

isoDataTemp

1 个答案:

答案 0 :(得分:1)

要取消注册您拥有的事件的所有事件处理程序,只需使用以下代码:

isoDataTemp.CheckExecution = null;

请注意,这适用于匿名和非匿名事件处理程序。

在您的示例中,您可以将此代码添加到OnFormClosing事件中,以确保正确且完全删除分配给isoDataTemp对象的事件。

请注意,如果isoDataTemp对象是表单对象的子对象,那么当您的Form对象被销毁时它将被删除,并且会像预期的那样与已销毁的Form对象实例一起被垃圾收集。