如何从一个ReactiveCommand中取消一个Observable
本文关键字:一个 取消 Observable ReactiveCommand | 更新日期: 2023-09-27 18:04:44
我有以下内容:
Compress = this.WhenAnyValue(x => x.ImagesCount, x => x > 0).ToCommand();
var process = Compress.RegisterAsync(ConvertImages);
var subscription = process.Subscribe(x => Images.Remove(x));
CancelConversion = this.WhenAnyValue(x => x.ImagesCount, x => x.IsBusy, (count, busy) => count > 0 && busy).ToCommand();
CancelConversion.RegisterAsyncAction();
其中ConvertImages(object o)
是ViewModel的私有方法,反过来,调用并返回服务类中ConvertImages(IEnumerable<ImageDto> images)
的结果,该服务类调整和压缩图像并返回IObservable<ImageDto>
。
Paul Betts在这里建议通过实现我的IObservable
来实现取消,例如使用Observable.create
,所以有人能提供一个如何实现这样的可观察对象的例子吗?
还有什么是RxUI™如何表示取消?我应该在CancelConversion.RegisterAsyncAction()
中subscription.Dispose()
吗?我应该将.TakeUntil(CancelConversion.Execution_Signaled)
添加到var process
,我如何确定"cancelconversion . execution_signals"?
这很简单:
CancelConversion = this.WhenAnyValue(x => x.ImagesCount, x => x.IsBusy, (count, busy) => count > 0 && busy).ToCommand();
this.WhenAnyValue(x => x.ImagesCount, x => x > 0).ToCommand();
var process = Compress.RegisterAsync(x => ConvertImages().TakeUntil(CancelConversion));
var subscription = process.Subscribe(x => Images.Remove(x));
处理实际的取消(即停止ConvertImages正在做的任何工作)取决于你对ConvertImages的实现。