我必须取消订阅所有活动处理程序吗?

pdi*_*ddy 10 .net c# winforms

在VS中的Designer中,假设您双击按钮并生成此Click事件处理程序.

订阅代码在designer.cs中.

我想知道,在处理表格中我必须取消订阅活动吗?

此外,表格中的所有控件都将在表格处理时处理?它实际上是递归调用每个控件上的dispose?

Bri*_*sio 15

如果要挂钩自己的事件,则无需在Dispose上取消挂钩事件.

如果要在另一个对象中挂钩事件,则只需要担心它.这样做的原因是事件挂钩将引用保持为订阅者.如果你没有解开,只要观察者还活着,你就不会收集垃圾.

当你挂钩自己的事件时,你有一个自己的引用,这是循环的,因此你不需要担心它.

由于这个原因,我来支持更松散耦合的事件模式.这是.Net内存泄漏的第一名.我更喜欢Event Aggregator模式(弱事件).