当我无法确定地取消订阅时,我正在使用弱事件(否则我更喜欢+=
而-=
不是弱事件):
class SomeType
{
public SomeType(...)
{
// object doesn't know when it will be removed
WeakEventManager(SomeSource, EventArgs).AddHandler(someSourceInstance,
nameof(SomeSource.SomeEvent), (s, e) => { ... });
}
}
这样,如果对象被垃圾收集,则不会调用事件处理程序。完美的。
然而。如果对象还没有被垃圾回收(但是没有更多的强引用),那么事件处理程序仍然会被调用。
我的问题比较笼统:使用弱事件时应该怎么做?使用弱事件时,我应该期待事件处理程序中的无效调用吗?还是我应该强制 GC避免这种情况(某种确定性的“清理”)?还有什么?