0

我正在使用 ReactiveUI。在一个按钮上,我想调用一个网络服务。如果此调用成功,我想更新我的 UI。

使用 注册异步函数时RegisterAsyncFunction,您会得到一个可以订阅的 observable。这使您有机会在异步代码返回时运行代码,并且您还可以ObserveOnDispatcher()在 UIThread 上运行代码。

唯一的问题是 - 我的命令没有返回值。

RegisterAsyncAction认为是为此目的,但我找不到任何方法知道何时完成此操作。

在这种情况下,使用 ReactiveAsyncCommand 的正确方法是什么?

4

1 回答 1

1

hwhoops,看起来你发现了一个错误RegisterAsyncAction,它应该返回IObservable<Unit>

同时,只需将更正后的版本复制粘贴到您的应用程序中,它只是一个扩展方法:

    /// <summary>
    /// RegisterAsyncAction registers an asynchronous method that runs
    /// whenever the Command's Execute method is called and doesn't return a
    /// result.
    /// </summary>
    /// <param name="calculationFunc">The function to be run in the
    /// background.</param>
    public static IObservable<Unit> RegisterAsyncAction(this IReactiveAsyncCommand This, 
        Action<object> calculationFunc,
        IScheduler scheduler = null)
    {
        return This.RegisterAsyncFunction(x => { calculationFunc(x); return Unit.Default; }, scheduler);
    }

你也可以ObserveOnDispatcher()在 UIThread 上运行代码。

你实际上不需要这样做,RxUI 已经保证结果Register*会在 UI 线程上返回。

于 2013-04-16T20:38:53.403 回答