![](/img/trans.png)
[英]How to convert a function written using Rx Observable.FromEventPattern for event handlers to a pure .net event handler(without Rx)
[英]How do you register/unregister handlers to the event used in Observable.FromEventPattern?
我從Observable.FromEventPattern獲取一個IObservable,如下所示:
SomeObject target = new SomeObject();
string eventName = "SomeEvent";
IObservable<T> obs = Observable.FromEventPattern<T>(target, eventName);
據我了解,FromEventPattern調用將自動為我生成添加/刪除事件處理程序。 但是何時真正添加/刪除處理程序?
我假定在訂閱IObservable時添加了處理程序。 處置訂戶后,處理程序還會自動注銷嗎?
自己編寫一個簡單的測試就很容易了,只需簡單地提供自己的引起副作用的處理程序,就可以Observable
在何時使用添加/刪除處理程序:
var observable = Observable.FromEvent(
action => Console.WriteLine("Added"),
action => Console.WriteLine("removed"));
Console.WriteLine("Subscribing");
var subscription = observable.Subscribe(unit => { });
Console.WriteLine("disposing");
subscription.Dispose();
Console.WriteLine("done");
打印輸出:
Subscribing Added disposing removed done
告訴我們,訂閱將調用添加處理程序,而處理預訂對象將刪除處理程序。
如果您對可觀察對象有多個訂閱,那么只要您訂閱沒有先前訂閱的可觀察對象,就會在任何時候添加處理程序,並且僅當處理程序是最后剩余的訂閱者時,處置訂閱才會刪除該處理程序。 通過修改測試以創建多個訂閱,然后將其全部處理,可以看出這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.