如何在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;
}
有人可以告诉我我做错了什么和/或提供一个如何等待并同步得到结果的例子吗?
提前致谢。
答案 0 :(得分:1)
await
将暂停该方法,但不会暂停该线程。我的博客上有async
intro您可能会觉得有帮助。
var result = await messageService.ShowAsync("<Text>", "<Header>", MessageButton.YesNo, MessageImage.Question);
if (result == MessageResult.Yes)
saveChanges = true;