使用GetInvocationList取消订阅事件处理程序

时间:2012-06-12 22:17:08

标签: c# events memory-leaks event-handling robustness

我的基类中有一些事件要在IDisposable或Finalizer中应用以下模式。

var onCategorizedMessage = this.OnCategorizedMessage.GetInvocationList().ToList();
foreach (var item in onCategorizedMessage)
    this.OnCategorizedMessage -= item;

我会在每个事件中重复一次此代码。

这是处理取消订阅事件以防止内存泄漏的合理且可靠的方法吗?

1 个答案:

答案 0 :(得分:0)

没有必要使用forforeach来执行此操作,因为您可以访问支持字段(存储代理),您只需要这样做:

this.OnCategorizedMessage = null;

有关详细信息,请查看此处: http://www.codeproject.com/Articles/864690/Simplifying-Events-in-NET