我有一个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();
}
Run Code Online (Sandbox Code Playgroud)
我还应该使用图像作为启动画面,如果这与消息框有关系.
抱歉,此代码尚未完成.提前致谢
您的问题源于WPF的已知问题:
首先,它与启动画面一起使用时会发生.如果您没有为消息框指定父级,则它假定启动屏幕是它的父级,因此在启动屏幕关闭时关闭.其次,即使你在MainWindow的构造函数中将父指定为MainWindow,它仍然无法工作,因为MainWindow还没有句柄(它稍后会被创建).
因此,解决方案是将消息框的调用推迟到构造函数之后,并将MainWindow指定为父级.这是修复它的代码:
Dispatcher.BeginInvoke(
new Action(() => MessageBox.Show(this, e.Message)),
DispatcherPriority.ApplicationIdle
);
Run Code Online (Sandbox Code Playgroud)
这是对父/溅问题的引用:http: //connect.microsoft.com/VisualStudio/feedback/details/381980/wpf-splashscreen-closes-messagebox