[英]Rx - unsubscribing from events
我有一个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);
当进度== 100时如何退订? 如果我在.Where子句后添加.Take(1)调用,那会自动退订吗?
您可以使用TakeWhile方法:
eventStream.TakeWhile(e => myFoo.Progress != 100);
当TakeWile的谓词返回false时, 它将处置基础的可观察序列,而无需手动调用Dispose。
一种选择是使用Subscribe
返回值:
IDisposable subscription = eventStream.Where(e => myFoo.Progress == 100)
.Subscribe(OnFooFinished);
...
// Unsubscribe
subscription.Dispose();
我怀疑使用Take(1)
确实会退订,这对您来说可能更整洁。 看了一下,我很确定这将取消订阅,因为它会触发“完成”消息,该消息通常会自动取消订阅。 我目前没有时间对此进行确认,恐怕:(
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.