我有一个wpf应用程序,我需要显示一个消息框,问题是消息框显示0.5秒,甚至没有等待用户点击确定。
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
//verifying application setting file to see if the connection is ok
string pathToApp = System.AppDomain.CurrentDomain.BaseDirectory + "settings.sts";
ApplicationSettings applicationSettings = new ApplicationSettings();
applicationSettings.ServerIp = "127.0.0.1";
applicationSettings.ServerDatabase = "test";
applicationSettings.ServerUserName = "root";
applicationSettings.MakeConnectionString();
foreach (char c in "")
{
applicationSettings.ServerPassword.AppendChar(c);
}
MySqlConnection connection = new MySqlConnection(applicationSettings.ConnectionString);
try
{
connection.Open();
}
catch (Exception e)
{
// here the message box shows for 0.5 second and closes immediately
MessageBox.Show(e.Message);
}
finally
{
connection.Close();
}
//display window
InitializeComponent();
}
我还应该使用图像作为启动画面,如果这与消息框有关系。
抱歉,此代码尚未完成。提前谢谢答案 0 :(得分:6)
您的问题源于WPF的已知问题:
首先,它与启动画面一起使用时会发生。如果您没有为消息框指定父级,则它会假定启动屏幕是它的父级,因此在启动屏幕关闭时关闭。其次,即使你在MainWindow的构造函数中将父指定为MainWindow,它仍然无法工作,因为MainWindow还没有处理(它稍后会被创建)。
因此,解决方案是将消息框的调用推迟到构造函数之后,并将MainWindow指定为父级。以下是修复它的代码:
Dispatcher.BeginInvoke(
new Action(() => MessageBox.Show(this, e.Message)),
DispatcherPriority.ApplicationIdle
);
这里是对父/启动问题的引用: http://connect.microsoft.com/VisualStudio/feedback/details/381980/wpf-splashscreen-closes-messagebox