如果我创建一个 .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/