小编UUH*_*IVS的帖子

Reactive UI 6:如何在版本6中实现版本4的相同功能

我从旧示例(Reactive UI 4)获得此代码:

StartAsyncCommand = new ReactiveCommand();
        StartAsyncCommand.RegisterAsyncAction(_ =>
        {
            Progress = 0;
            var exe = Enumerable.Range(0, 10).Select(x =>
                            {
                                Thread.Sleep(100);
                                return x;
                            }).ToObservable();
            exe.Subscribe(x =>Progress += 10);
        });
Run Code Online (Sandbox Code Playgroud)

它工作正常,UI不会阻止,按钮被禁用,直到进度达到100%.

当我迁移到版本6时,我尝试了许多方法来实现相同的功能而没有成功.

这些是我的尝试:

1)使用 CreateAsyncObservable

GenerateCommand = ReactiveCommand.CreateAsyncObservable(canGenerate, x => DoSomething());

public IObservable<Unit> DoSomething()
    {
        var exe = Enumerable.Range(0, 10).Select(
            x =>
            {
                Thread.Sleep(200);
                return x;
            }).ToObservable().ObserveOnDispatcher().SubscribeOn(NewThreadScheduler.Default);
        exe.Subscribe(x =>
                Progress += 10
            );
        return Observable.Return(new Unit());
    }
Run Code Online (Sandbox Code Playgroud)

它工作但按钮不会禁用.

2)有 CreateAsyncTask

GenerateCommand = ReactiveCommand.CreateAsyncTask(canGenerate, x => DoSomething());

public async Task<Unit> DoSomething()
    { …
Run Code Online (Sandbox Code Playgroud)

c# wpf asynchronous system.reactive reactiveui

1
推荐指数
1
解决办法
669
查看次数

标签 统计

asynchronous ×1

c# ×1

reactiveui ×1

system.reactive ×1

wpf ×1