...and这不能解释为什么。T-T
在我的Application_Startup
事件处理程序中,我有类似如下的代码:
private void Application_Startup(object sender, StartupEventArgs e)
{
string errorMessage;
if(CheckStartUpConditions(out errorMessage))
{
(new MainWindow()).Show();
}
else
{
MessageBox.Show(errorMessage, "Application Startup",
MessageBoxButton.OK, MessageBoxImage.Error);
Shutdown();
}
}
private bool CheckStartUpConditions(out string errorMessage)
{
errorMessage = string.Empty;
if(...)
errorMessage += "Please login to xxx. ";
if(...)
errorMessage += "Please install xxx.";
if(string.IsNullOrEmpty(errorMessage))
return true;
else
return false;
}
消息框会短暂出现一秒钟,然后会发出“砰!”的声音。它不会等待我点击“确定”或点击"X“按钮。我真的很难理解为什么会发生这种情况,所以任何帮助都会非常感谢。
我试着注释掉对Shutdown
的调用,只是为了好玩,它仍然以同样的方式运行。
另外,这个应用程序也有一个SplashScreen
,所以我不知道这是否会影响它。
编辑:如果有帮助,我添加了更多代码。消息框显示正确的错误消息。只是不会停留足够长的时间让用户阅读它。>:(
编辑第二部分:好的……我想我找到罪魁祸首了。:(我将用作启动的图像上的构建操作从SplashScreen更改为None,消息框现在将保留并等待用户输入。我不明白为什么SplashScreen要搞乱MessageBox。>:(
发布于 2011-05-08 03:50:39
尝试使用接受System.Windows.Window
参数并传递Null
值的重载来使MessageBox成为应用程序的顶级窗口,该窗口独立于可能存在的所有其他窗口。我猜你的MessageBox是由闪屏表单拥有的。当闪屏关闭时,框架将关闭MessageBox。因此,让你的MessageBox变得无主应该能起到作用。
发布于 2016-03-17 10:43:09
消息框立即消失,因为它没有所有者。如果指定选项MessageBoxOptions.DefaultDesktopOnly
,桌面将被指定为所有者,并且消息框将在没有主窗口的应用程序上正常工作。
MessageBox.Show(
"Message",
"Title",
MessageBoxButton.YesNoCancel,
MessageBoxImage.Question,
MessageBoxResult.Cancel,
MessageBoxOptions.DefaultDesktopOnly);
发布于 2012-08-24 00:03:38
根据Alexey Ivanov的建议,我成功地使用了一个新窗口作为父窗口
System.Windows.Forms.MessageBox.Show(new System.Windows.Forms.NativeWindow(), errorMessage, "Application Startup", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
https://stackoverflow.com/questions/5923188
复制相似问题