Jud*_*ngo 7 c# system.reactive
我有一个INotifyPropertyChanged对象,Foo.我使用Rx的FromEvent方法将Foo转换为可观察的事件流:
var myFoo = new Foo();
var eventStream = Observable.FromEvent<PropertyChangedEventArgs>(myFoo, "PropertyChanged");
Run Code Online (Sandbox Code Playgroud)
现在我想听一个特定的属性改变,如果.Progress == 100,取消订阅:
eventStream
.Where(e => myFoo.Progress == 100)
.Subscribe(OnFooFinished);
Run Code Online (Sandbox Code Playgroud)
如果进度== 100,我如何取消订阅?如果我在.Where子句后添加.Take(1)调用,那会自动取消订阅吗?
Mar*_*son 19
您可以使用TakeWhile方法:
eventStream.TakeWhile(e => myFoo.Progress != 100);
Run Code Online (Sandbox Code Playgroud)
TakeWhile 将在其谓词返回false时处置基础可观察序列,您不必手动调用dispose.
Jon*_*eet 14
一种选择是使用返回值Subscribe
:
IDisposable subscription = eventStream.Where(e => myFoo.Progress == 100)
.Subscribe(OnFooFinished);
...
// Unsubscribe
subscription.Dispose();
Run Code Online (Sandbox Code Playgroud)
我怀疑使用Take(1)
确实会取消订阅,而且它可能更适合你.看了一下之后,我很确定这会取消订阅,因为它会触发"已完成"的消息,该消息通常会自动取消订阅.我现在没有时间检查这个,我害怕:(
归档时间: |
|
查看次数: |
9515 次 |
最近记录: |