父窗体关闭时如何显示状态对话框

时间:2011-09-25 22:05:03

标签: c# wpf event-handling

我有一个WPF应用程序,需要一段时间才能关闭所以我想添加一个'请等待'对话框,以便在主窗体关闭时显示。但是,当我将'formmessage.show'添加到我的主窗体的结束事件处理程序时,表单显示但不是“请稍候”文本,我得到的只是一个白色矩形。这似乎只是在从关闭处理程序调用此代码时发生。它可以从其他处理程序(单击或最大化)工作正常。有人可以帮忙吗?这是我的简化代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        Form1 f = new Form1();
        f.Show();
        System.Threading.Thread.Sleep(3000);
    }
}

Form1上有一个标签,上面写着“请稍等”。

2 个答案:

答案 0 :(得分:2)

试试:

Application.Current.Dispatcher.Invoke(
    DispatcherPriority.Normal, 
    new Action(() =>
                {
                    Form1 f = new Form1();
                    f.Show();
                    System.Threading.Thread.Sleep(3000);
                }));

BTW,您可以删除Thread.Sleep(),因为Application Shutdown mode的默认值为OnLastWindowClose,因此应用程序将处于活动状态,直到用户明确关闭活动窗口,此行为可以通过切换{来更改{1}} Application.ShutdownMode文件中的OnMainWindowClose

答案 1 :(得分:1)

这是因为你在同一个线程中创建表单你要告诉它睡觉,在此期间它不会响应绘制请求,尝试在另一个线程中启动表单,并在MainWindow的析构函数中关闭它。 / p>