Catel 4.0:IMessageService同步获取对话框结果

时间:2014-07-30 13:31:02

标签: c# asynchronous dialog catel

如何在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;
    }

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

var result = await messageService.ShowAsync("<Text>", "<Header>", MessageButton.YesNo, MessageImage.Question);
if (result == MessageResult.Yes)
    saveChanges = true;