如何使用 .NET Rx FromEvent 以便调用一次添加事件处理程序并按需调用删除处理程序
How to use .NET Rx FromEvent so that add event handler is called once and remove handler is called on demand
是否可以使用 .NET Rx Observable.FromEvent 方法,或者是否有另一种方法允许从事件创建 Observable,但仅在调用第一个 Subscribe 方法或FromEvent(或类似方法)被调用,并且当 Observer 取消订阅时不调用删除事件,而是允许手动删除事件。
我有一个特殊的情况。提供该事件的库仅允许添加一个或多个处理程序,直到调用该对象的某个方法为止。之后尝试添加另一个处理程序会引发异常。因此,我似乎无法使用 FromEvent,因为生成的 Observable 每次调用 Subscribe 时都会添加和删除事件处理程序,然后取消订阅 Observer。
在这种情况下最好的方法是什么?
使用Publish
method to get an IConnectableObservable<T>
想订阅多少次就订阅多少次。该事件只会有一个基础订阅,订阅和取消订阅该可观察对象不会对基础订阅产生任何影响。
IConnectableObservable<T> connectableObservable = Observable.FromEvent(…).Publish();
在您调用 Connect
之前,该事件将被忽略。
IDisposable connection = connectableObservable.Connect();
当 connection
处于活动状态时,所有订阅者都会在事件触发时收到通知。要取消订阅基础事件,Dispose
connection
.
connection.Dispose();
现在事件将再次被忽略。
是否可以使用 .NET Rx Observable.FromEvent 方法,或者是否有另一种方法允许从事件创建 Observable,但仅在调用第一个 Subscribe 方法或FromEvent(或类似方法)被调用,并且当 Observer 取消订阅时不调用删除事件,而是允许手动删除事件。
我有一个特殊的情况。提供该事件的库仅允许添加一个或多个处理程序,直到调用该对象的某个方法为止。之后尝试添加另一个处理程序会引发异常。因此,我似乎无法使用 FromEvent,因为生成的 Observable 每次调用 Subscribe 时都会添加和删除事件处理程序,然后取消订阅 Observer。
在这种情况下最好的方法是什么?
使用Publish
method to get an IConnectableObservable<T>
想订阅多少次就订阅多少次。该事件只会有一个基础订阅,订阅和取消订阅该可观察对象不会对基础订阅产生任何影响。
IConnectableObservable<T> connectableObservable = Observable.FromEvent(…).Publish();
在您调用 Connect
之前,该事件将被忽略。
IDisposable connection = connectableObservable.Connect();
当 connection
处于活动状态时,所有订阅者都会在事件触发时收到通知。要取消订阅基础事件,Dispose
connection
.
connection.Dispose();
现在事件将再次被忽略。