C# - 清理事件处理程序

本文关键字:事件处理 程序 | 更新日期: 2023-09-27 18:31:36

使用 C#,我有一个有这段代码的方法(名称已更改)-

private void func(...)
{
   ClassName c = new ClassName();
   c.EventName += delegate 
                  {
                    //do some work
                  };
}

现在,当方法退出时,事件处理程序是垃圾回收,还是保留在内存中?

C# - 清理事件处理程序

当 c 实例被垃圾回收时,它将被垃圾回收。您无需执行任何操作即可将其删除。一旦方法完成,c 实例就有资格进行垃圾回收。

这是

来自MSDN,

若要防止在引发事件时调用事件处理程序,只需取消订阅事件即可。为了防止资源泄漏,在释放订阅者对象之前取消订阅事件非常重要。在取消订阅事件之前,作为发布对象中事件基础的多播委托具有对封装订阅服务器事件处理程序的委托的引用。只要发布对象保存该引用,就不会对订阅者对象进行垃圾回收。

您可以按如下方式取消订阅事件,

  publisher.RaiseCustomEvent -= HandleCustomEvent;