0

如何在 Catel 4.0 中显示带有 IMessageService 的对话框并立即(而不是异步)获得结果?

以前可以这样:

var messageService = ServiceLocator.ResolveType<IMessageService>();
var result = messageService.Show("<Message>", "<Header>", MessageButton.YesNo, MessageImage.Question);
if (result != MessageResult.Yes) 
    return;

现在在 Catel 4.0 中,文档说:“现在有必要使用 await 或 Task.ContinueWith 来等待结果。”

我对异步编程不是很熟悉并且尝试了很多,但最终我无法获得等待实际对话结果的方法。

我做了这样的事情:

private async Task<bool> Close()
    {
        var saveChanges = false;

        var resolver = ServiceLocator.Default.GetDependencyResolver();
        var messageService = resolver.Resolve<IMessageService>();

        var result = await messageService.Show("<Text>", "<Header>", MessageButton.YesNo, MessageImage.Question);

        if (result == MessageResult.Yes)
            saveChanges = true;

        return saveChanges;
    }

有人可以告诉我我做错了什么和/或提供一个示例如何同步等待并获得结果吗?

提前致谢。

4

1 回答 1

1

await将暂停方法,但不会暂停线程。我的博客上有一个async介绍,您可能会觉得有帮助。

var result = await messageService.ShowAsync("<Text>", "<Header>", MessageButton.YesNo, MessageImage.Question);
if (result == MessageResult.Yes)
    saveChanges = true;
于 2014-07-30T13:51:00.793 回答