【问题标题】:How to use .NET Rx FromEvent so that add event handler is called once and remove handler is called on demand如何使用 .NET Rx FromEvent 以便调用一次添加事件处理程序并按需调用删除处理程序
【发布时间】:2015-06-09 12:24:42
【问题描述】:

是否可以使用 .NET Rx Observable.FromEvent 方法,或者是否有另一种方法允许从事件创建 Observable 但仅在调用第一个订阅方法或 FromEvent(或类似方法)时调用添加事件处理程序一次方法)被调用,并且在取消订阅观察者时不调用删除事件,而是允许手动删除事件。

我有一个特殊的情况。提供该事件的库只允许添加一个或多个处理程序,直到调用该对象上的某个方法。之后尝试添加另一个处理程序会引发异常。因此,我似乎无法使用 FromEvent,因为每次调用 Subscribe 时生成的 Observable 都会添加和删除事件处理程序,然后取消订阅 Observer。

在这种情况下最好的方法是什么?

【问题讨论】:

  • 顺便说一句,您知道您需要Observable.FromEvent 还是您正在处理标准事件模式并且应该改用Observable.FromEventPattern

标签: .net system.reactive observable


【解决方案1】:

使用Publish 方法获取IConnectableObservable<T>

根据需要多次订阅此 observable。该事件只会有一个基础订阅,并且订阅和取消订阅此 observable 不会对基础订阅产生任何影响。

IConnectableObservable<T> connectableObservable = Observable.FromEvent(…).Publish();

在您致电Connect 之前,该事件将被忽略。

IDisposable connection = connectableObservable.Connect();

connection 处于活动状态时,所有可观察对象的订阅者都会在事件触发时收到通知。要取消订阅基础事件,Dispose connection

connection.Dispose();

现在事件将再次被忽略。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多