我有一个 INotifyPropertyChanged 对象,Foo。我使用 Rx 的 FromEvent 方法将 Foo 变成一个可观察的事件流:
var myFoo = new Foo();
var eventStream = Observable.FromEvent<PropertyChangedEventArgs>(myFoo, "PropertyChanged");
现在我想监听一个特定属性的变化,如果 .Progress == 100,取消订阅:
eventStream
.Where(e => myFoo.Progress == 100)
.Subscribe(OnFooFinished);
当 Progress == 100 时如何取消订阅?如果我在 .Where 子句之后添加一个 .Take(1) 调用,它会自动取消订阅吗?
最佳答案
一种选择是使用订阅
的返回值:
IDisposable subscription = eventStream.Where(e => myFoo.Progress == 100)
.Subscribe(OnFooFinished);
...
// Unsubscribe
subscription.Dispose();
我怀疑虽然使用Take(1)
确实会取消订阅,但它可能对您来说更简洁。稍微看了一下,我很确定这会取消订阅,因为它会触发“完成”消息,该消息通常会自动取消订阅。恐怕我现在没有时间确认这一点:(
关于c# - Rx - 取消订阅事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3449834/