我是一名应用程序开发者(使用c# + wpf),在我的应用程序中,所有的模态样式对话框都是以 UserControl
的形式实现的,覆盖在主 Window
上方的半透明网格中。这意味着只有一个 Window
,并且它保持了所有公司应用程序的外观和感觉。
要显示一个 MessageBox
,语法如下:
CustomMessageBox b = new CustomMessageBox("hello world");
c.DialogClosed += ()=>
{
// the rest of the function
}
// this raises an event listened for by the main window view model,
// displaying the message box and greying out the rest of the program.
base.ShowMessageBox(b);
正如您所看到的,执行流程不仅被倒置了,而且与经典的.NET版本相比,它非常冗长。
MessageBox.Show("hello world");
// the rest of the function
我真正需要的是一种方法,能够在对话框关闭事件被触发之前,不从
base.ShowMessageBox
返回,但我无法想象如何等待它而不会挂起GUI线程,从而阻止用户单击OK。我知道可以将委托函数作为ShowMessageBox
函数的参数,这可以防止执行的倒置,但仍会导致一些疯狂的语法/缩进问题。我是否遗漏了某些明显的事情?或者有没有标准的方法可以做到这一点?