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