c# - 我需要删除这种事件处理程序吗?

标签 c# .net delegates

如果我创建一个 .NET 类,它使用这样的匿名函数订阅一个事件:

void MyMethod()
{
   Application.Current.Deactivated += (s,e) => { ChangeAppearance(); };
}

此事件处理程序是否会成为阻止我的类被垃圾收集的根?

如果没有,哇哦!但如果是这样,你能告诉我删除语法吗?仅将 -= 与相同的代码一起使用似乎是错误的。

最佳答案

您可以使用 Simon D. 建议的“真实”方法,也可以这样做:

EventHandler handler = null;
handler = (s,e) => { 
    Application.Current.Deactivated -= handler;
    ChangeAppearance();
};
Application.Current.Deactivated += handler;

由于这有点丑陋并且违背了使用 lambda 来简洁的目的,我可能会把它重构为一个方法。但了解其他方法很有用。

警告:不用说,在您订阅事件之间,您必须非常小心,不要弄乱 handler 的值以及实际调用它的点,否则取消订阅部分将无法正常工作。

关于c# - 我需要删除这种事件处理程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5198507/

相关文章:

swift - 在 Swift 中为更多 View Controller 自定义 TableView ?

swift 。将 UIImagePicker 的委托(delegate)作为参数传递

c# - 类与结构

c# - C#如何编写正则表达式

.net - 为什么这两条sql语句会死锁? (死锁图+详细信息包括在内)

c# - 取消订阅类事件?

c# - 在创建表 SQL Server 命令中引用默认值

c# - 为什么程序使用添加到委托(delegate)的最后一个方法?

c# - 使用 JavaScriptSerializer 和自定义 JavaScriptConverter 序列化和反序列化 Dictionary<int, object>

c# - ReSharper 减慢 VS 2010