C# ReactiveUI:如何从ReactiveCommand中取消一个可观察对象?

C# ReactiveUI:如何从ReactiveCommand中取消一个可观察对象?,c#,reactiveui,C#,Reactiveui,我有以下资料: 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 =&

我有以下资料:

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 images)
的结果,该服务类对图像进行大小调整和压缩,并返回一个
IObservable

Paul Betts建议通过实现my
IOObservable
来实现取消,例如使用
Observable.create
,那么有人能提供一个如何实现这种Observable的示例吗

还有什么是RxUI™ 如何发出取消的信号?我是否应该在
CancelConversion.registerasyncation()
subscription.Dispose()
?我应该将
.TakeUntil(CancelConversion.Execution\u Signaled)
添加到
var进程
,如何确定“CancelConversion.Execution\u Signaled”?

这相当简单:

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的实现。

这相当简单:

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的实现。

我不了解ConvertImages的签名,是不是真的
IObservable ConvertImages(IObservable images)
?谢谢,我已经更新了方法签名,它是
ConvertImages(IEnumerable images)
,如果参数的类型是可观察的,是否有任何问题?在这种情况下,
进程中的
x
是否会订阅(x=>…
是一个
IObservable
?我已经更正了这个问题,以反映实际的执行链,缺少了一个步骤,也许这就是@PaulBetts询问方法签名的原因,对此表示抱歉。实际上,@MojoFilter,因为
ConvertImages(对象o)
返回一个
IObservable
它会将
ImageDto
对象推送到订阅者手中,对吗?IntelliSense在我的VS@MojoFilter上显示了这些类型,没有IDE的帮助很容易失去焦点:)我不理解ConvertImages的签名,它真的是
IObservable ConvertImages(IObservable images)
?谢谢,我已经更新了方法签名,它是
ConvertImages(IEnumerable images)
,如果参数的类型是可观察的,是否有任何问题?在这种情况下,
进程中的
x
是否会订阅(x=>…
是一个
IObservable
?我已经更正了这个问题,以反映实际的执行链,缺少了一个步骤,也许这就是@PaulBetts询问方法签名的原因,对此表示抱歉。实际上,@MojoFilter,因为
ConvertImages(对象o)
返回一个
IObservable
它会将
ImageDto
对象推送到订阅者,对吗?IntelliSense在我的VS.MojoFilter上显示了这些类型,没有IDE的帮助很容易失去焦点:)“这相当容易”,这正是我所认为的!因此
TakeUntil()
will
Dispose()
订阅完成后就可以订阅了,对吗?谢谢你的回答。@LucianoDelucchi是的,你是对的-你通常根本不需要管理一次性用品。第3行需要什么?“这相当简单”这正是我想的!所以
TakeUntil()
will
Dispose()
订阅完成后立即订阅,对吗?谢谢你的回答。@LucianoDelucchi是的,你是对的-你通常不必明确地管理一次性物品。这是第3行需要的吗?