0
我从Observable.FromEventPattern得到一个的IObservable,如下图所示:如何向Observable.FromEventPattern中使用的事件注册/取消注册处理程序?
SomeObject target = new SomeObject();
string eventName = "SomeEvent";
IObservable<T> obs = Observable.FromEventPattern<T>(target, eventName);
据我了解,在FromEventPattern呼叫会自动生成添加/删除事件处理我。但是什么时候处理程序实际上被添加/删除?
我认为处理程序是在IObservable订阅时添加的。处理程序是否也会在用户处置时自动取消注册?
谢谢,我不知道那些其他覆盖这样做。那么这是否意味着如果你不处理订阅并且它超出范围,那么它仍然保持对该事件的强烈参考(并且可能导致泄漏?) – fred 2014-10-07 17:23:58
@fred是的。通常使用[CompositeDisposable](http://msdn.microsoft.com/zh-cn/library/system.reactive.disposables.compositedisposable.aspx)保留一次性使用的集合。 – 2014-10-07 17:27:04
@fred可观察对象将会引用正在观察的任何事物,只要事件被附加,观察对象就持有对可观察事物的引用,这是一个循环引用。这意味着GC如果另一个根深蒂固,则无法回收一个。现在,如果*两者*可观察的*和*被观察物体的寿命已经结束,那么*两个*都可以被回收。如果你坚持引用一个引用,并且希望另一个引用能够被释放,那么只有手上有问题,在这种情况下,你需要“解除”它们。 – Servy 2014-10-07 17:31:18