消息框在短暂延迟后自动关闭

时间:2014-07-31 17:05:02

标签: c# wpf

我有一个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();

    }

我还应该使用图像作为启动画面,如果这与消息框有关系。

抱歉,此代码尚未完成。提前谢谢

1 个答案:

答案 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