Catel 调用 ShowDialogAsync 同步

Catel call ShowDialogAsync sync

我尝试在同步代码中调用 ShowDialogAsync。我对异步编程不是很熟悉。如果我 运行 这段代码,我将陷入僵局。如果我将 Command 更改为 TaskCommand,它会起作用,但我必须将所有代码更改为异步。

    public MainWindow()
    {
        InitializeComponent();
        Abc = new Command(() => Asd());
    }

    public Command Abc { get; set; }

    private void Asd()
    {
        var b = StartDialog(true).GetAwaiter().GetResult();
    }

    private async Task<bool> StartDialog(bool isMultiple)
    {
        await ServiceLocator.Default.ResolveType<IUIVisualizerService>().ShowDialogAsync<PersonVm>(new PersonM());
        return true;
    }

这里我使用了here的答案。 有人可以帮我吗?

推荐的方法是将代码迁移到异步。 Catel 中的大多数功能都是异步的(例如 vm 初始化等)。起初它可能有点让人不知所措,但是一旦您了解了它的工作原理,它就是一种非常方便的编程方式。在同时,您可以使用解决方法(这不是最佳实践,但可以帮助您完成此任务):

    private async void Asd()
    {
        var b = await StartDialog(true);
    }

请注意,不推荐使用 async void,应该避免使用,除非 没有其他选项可用(例如 non-async 事件处理程序等)。