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

C# Catel 4.0:IMessageService同步获取对话框结果,c#,asynchronous,dialog,catel,C#,Asynchronous,Dialog,Catel,如何在Catel 4.0中显示带有IMessageService的对话框并立即(而不是异步)获得结果 以前可能是这样的: var messageService = ServiceLocator.ResolveType<IMessageService>(); var result = messageService.Show("<Message>", "<Header>", MessageButton.YesNo, MessageImage.Question);

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

以前可能是这样的:

var messageService = ServiceLocator.ResolveType<IMessageService>();
var result = messageService.Show("<Message>", "<Header>", MessageButton.YesNo, MessageImage.Question);
if (result != MessageResult.Yes) 
    return;
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;
    }
var messageService=ServiceLocator.ResolveType();
var result=messageService.Show(“,”,MessageButton.YesNo,MessageImage.Question);
if(result!=MessageResult.Yes)
返回;
现在在Catel 4.0中,文档说明: “现在需要使用wait或Task.ContinueWith来等待结果。”

我不太熟悉异步编程,也尝试了很多,但最终我无法让方法等待实际的对话框结果

我是这样做的:

var messageService = ServiceLocator.ResolveType<IMessageService>();
var result = messageService.Show("<Message>", "<Header>", MessageButton.YesNo, MessageImage.Question);
if (result != MessageResult.Yes) 
    return;
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;
    }
专用异步任务关闭()
{
var saveChanges=false;
var resolver=ServiceLocator.Default.GetDependencyResolver();
var messageService=resolver.Resolve();
var result=wait messageService.Show(“,”,MessageButton.YesNo,MessageImage.Question);
if(result==MessageResult.Yes)
saveChanges=true;
返回保存的更改;
}
有人能告诉我我做错了什么和/或提供一个如何等待并同步获得结果的示例吗


提前感谢。

wait
将暂停方法,但不会暂停线程。我在我的博客上有一篇文章,你可能会觉得很有帮助

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

谢谢你的链接,这是一个很好的介绍,我现在肯定觉得自己聪明了一点;)。我更新了我的“Close”方法,以便能够等待它的结果,但因此我必须再次声明调用方法async,这不是我想要的。在某个时刻,我确实想等待,但这似乎不起作用。
async
将在整个代码库中“增长”。这既自然又正确。你为什么不想要这个?我会尽力解释的。我有一个嵌套布局(父选项卡和子选项卡)。关闭父级时,我首先检查是否有未保存的子级更改。如果为true,我想打开一个MessageBox,询问用户是否要保存更改。处理父选项卡关闭的方法会打开MessageBox,但由于异步调用,它会立即继续并关闭父选项卡。然后,消息框显示为“断章取义”。这就是我想等待结果的原因。希望这是可以理解的:)@youknowwho:您要做的是截取(并取消)用户的实际“关闭请求”,异步地将
消息框
显示为模式对话框,然后在
等待
完成时进行实际关闭。好的,这听起来像是一种方式,需要一些更改,但是的,谢谢;)