订阅 ReactiveUi 中的 ThrownExceptions

pri*_*ehl 2 c# reactiveui

我正在迁移到 Reactive UI 版本 6,并尝试更完整地使用它提供的工具,即 ThrownExceptions。当我订阅抛出的异常属性时,什么也没有发生。我确信我错过了一些东西,只是不确定现在是什么。

在我的简化示例中,有一个带有绑定命令的按钮。

    public ReactiveCommand<object> Delete { get; private set; }

    public MainWindowViewModel()
    {
        Delete = ReactiveCommand.Create();
        Delete.Subscribe(e => CommandExec());
        Delete.ThrownExceptions.Subscribe(ex => HandleException(ex));

    }

    private object HandleException(Exception ex)
    {
        MessageBox.Show("Exception Handled");
        return null;
    }

    public IObservable<object> CommandExec()
    {
        throw new Exception("throwing");
    }
Run Code Online (Sandbox Code Playgroud)

我的假设是,当抛出异常时,我会看到一个“异常已处理”消息框。我确定我正在订阅某些内容,只是现在还不清楚它是什么。

Ana*_*tts 5

ThrownExceptions仅适用于通过以下方式声明的后台操作CreateAsyncXYZ

\n\n
var someCmd = ReactiveCommand.CreateAsyncObservable(_ => \n    Observable.Throw<Unit>(new Exception("Oh Noes!"));\n\nsomeCmd.ThrownExceptions.Subscribe(ex => Console.WriteLine(ex.Message));\n\nawait someCmd.ExecuteAsync();\n>>> Oh Noes!\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 ReactiveUI 中,您永远不应该将 Interesting\xe2\x84\xa2 代码放入 Subscribe 块中 - Subscribe 仅用于记录操作结果,或将属性连接到其他属性。

\n