简体   繁体   English

您如何向Observable.FromEventPattern中使用的事件注册/注销处理程序?

[英]How do you register/unregister handlers to the event used in Observable.FromEventPattern?

I'm getting an IObservable from Observable.FromEventPattern, as shown below: 我从Observable.FromEventPattern获取一个IObservable,如下所示:

SomeObject target = new SomeObject();
string eventName = "SomeEvent";
IObservable<T> obs = Observable.FromEventPattern<T>(target, eventName);

From what I understand, the FromEventPattern call will automatically generate add/remove event handlers for me. 据我了解,FromEventPattern调用将自动为我生成添加/删除事件处理程序。 But when does the handler actually get added/removed? 但是何时真正添加/删除处理程序?

I assume that the handler is added when the IObservable is subscribed to. 我假定在订阅IObservable时添加了处理程序。 Is the handler also automatically unregistered when the subscriber is disposed? 处置订户后,处理程序还会自动注销吗?

It's easy enough to just write up a simple test yourself to see when Observable uses the add/remove handlers by simply supplying your own handlers that cause side effects: 自己编写一个简单的测试就很容易了,只需简单地提供自己的引起副作用的处理程序,就可以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");

This prints out: 打印输出:

Subscribing
Added
disposing
removed
done

Telling us that subscribing invokes the add handler, and disposing the subscription object removes the handler. 告诉我们,订阅将调用添加处理程序,而处理预订对象将删除处理程序。

In the event that you have multiple subscriptions to the observable, then the handler will be added any time you subscribe to an observable that has no previous subscriptions, and disposing of a subscription only removes the handler if it was the last remaining subscriber. 如果您对可观察对象有多个订阅,那么只要您订阅没有先前订阅的可观察对象,就会在任何时候添加处理程序,并且仅当处理程序是最后剩余的订阅者时,处置订阅才会删除该处理程序。 This can be seen by modifying the test to create multiple subscriptions and then disposing of them all. 通过修改测试以创建多个订阅,然后将其全部处理,可以看出这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将使用Rx Observable.FromEventPattern编写的用于事件处理程序的函数转换为纯.net事件处理程序(不带Rx) - How to convert a function written using Rx Observable.FromEventPattern for event handlers to a pure .net event handler(without Rx) Observable.fromEventPattern TypedEventHandler - Observable.fromEventPattern TypedEventHandler ObservableCollection上的Observable.FromEventPattern - Observable.FromEventPattern on ObservableCollection 如何将SelectMany用于Observable.FromEventPattern序列上的异步逻辑? - How to use SelectMany for async logic on Observable.FromEventPattern sequence? 用 Observable.Create 包裹 Observable.FromEventPattern - Wrap Observable.FromEventPattern with Observable.Create 为什么Observable.FromEventPattern接受调度程序? - Why Observable.FromEventPattern take in a scheduler? Observable.FromEventPattern(addHandler,removeHandler)-简化吗? - Observable.FromEventPattern(addHandler, removeHandler ) - simplification? 何时使用Observable.FromEventPattern而不是Observable.FromEvent? - When to use Observable.FromEventPattern rather than Observable.FromEvent? 在 Reactive Extensions for .NET 中使用 Observable.FromEventPattern 时如何避免任何阻塞? - How can I avoid any blocking when using Observable.FromEventPattern in Reactive Extensions for .NET? 当使用TestScheduler将事件触发到具有ObserveOn的Observable.FromEventPattern时,在下一个事件被触发之前不会观察到事件 - When using TestScheduler to fire events into Observable.FromEventPattern that has an ObserveOn, the events aren't observed until next event is fired
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM