C# Catel 4.0:IMessageService同步获取对话框结果
如何在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);
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:您要做的是截取(并取消)用户的实际“关闭请求”,异步地将消息框
显示为模式对话框,然后在等待
完成时进行实际关闭。好的,这听起来像是一种方式,需要一些更改,但是的,谢谢;)