我不确定我是否完全理解了在对象中附加事件的含义。
这是我的当前理解,正确或详细说明:
1. 附加本地类事件不需要分离
例子:
this.Closing += new System.ComponentModel.CancelEventHandler(MainWindow_Closing);
public event EventHandler OnMyCustomEvent = delegate { };
我认为,当您的对象被处理或垃圾收集时,函数将被取消分配并自动从事件中分离。
2. 附加到不再需要的对象(= null;)必须从中分离
例子: 附加到计时器的Elapsed事件,您只响应一次。我想您需要将计时器存储在本地变量中,以便在事件触发后可以分离Elapsed事件。因此,在本地方法范围内声明计时器会导致泄漏:
System.Timers.Timer myDataTimer = new System.Timers.Timer(1000);
myDataTimer.Elapsed += new System.Timers.ElapsedEventHandler(myDataTimer_Elapsed);
3. 在本地对象中附加事件不需要清除?
例如,如果您创建、监视并让ObservableCollection死亡。如果您使用本地私有函数附加到CollectionChanged事件,那么在垃圾收集您的类时,此函数不会被释放,从而导致ObservableCollection也被释放?
我确定我有一些地方停止使用对象并未分离事件(例如我所做的计时器示例),因此我正在寻找更清晰的解释以了解其工作原理。