簡體   English   中英

您如何向Observable.FromEventPattern中使用的事件注冊/注銷處理程序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM