【问题标题】:Show a Window while application is closing在应用程序关闭时显示一个窗口
【发布时间】:2017-05-09 15:35:07
【问题描述】:

我有一个非常繁重的应用程序需要一些时间才能自行关闭(它还取决于运行它的电脑。但现在不是问题)

我想在这个关闭时间显示一个带有消息的自定义窗口,但是一旦我调用“关闭”方法,每个窗口都会消失(除了为 MessageBox 制作的)。

这是我试图用来实现我的目标的代码

void MainWindow_Closing(object sender, CancelEventArgs e)
{
    Task.Factory.StartNew(() =>
    {
        var closingWaitTest = "application closing, please wait;
        Application.Current.Dispatcher.Invoke(() =>
        {
            var closingSplash = new ClosingSplashWindow(closingWaitTest);
            closingSplash.Show();
        });

        MessageBox.Show(closingWaitTest);
    });

    Application.Current.Shutdown();
}

我添加了一个消息框只是为了检查,它确实有效。我的意思是,当我的窗口立即关闭时,MessageBox 一直保持打开状态,直到应用程序进程处于活动状态(我从 Windows 任务管理器中检查)。

希望有人可以对此提出一些建议, 在此先感谢(:

编辑 -

所以,主要问题是,一旦我调用 Application.Current.Shutdown,我的启动窗口就会立即关闭,而应用程序进程仍然启动并运行了一段时间(在调用关机之前处理我所有的东西实际上减少了这个一点时间)。

关键是我想在整个过程中显示一个窗口,该过程仍在运行;鉴于 MessageBox 的行为与此完全相同,我的问题是: 有没有办法让我的 ClosingSplashWindow 表现得像一个 MessageBox 并保持可见直到应用程序进程真的死了?

【问题讨论】:

    标签: c# wpf performance task splash-screen


    【解决方案1】:

    由于 Application.Current.Shutdown();将立即关闭应用程序。也许您首先有一个标志来跟踪该应用程序正在关闭,取消 Closing 事件并启动资源清理,然后是 Application.Current.Shutdown();再次。

    Application_Closing 处理程序可能会再次被触发,因为您有一个表明您即将关闭的标志,您可以直接退出处理程序,一切都应该很好。

    【讨论】:

      【解决方案2】:

      首先,您希望有一个标志表明您的应用程序当前正在关闭:

      private bool IsShuttingDown { get; set; }
      

      然后你应该取消关闭操作,执行一些繁重的工作并关闭你的应用程序:

      private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
      {
          if (!IsShuttingDown)
          {
              e.Cancel = true;
              ShowSplashWindow();
              PerformHeavyOperation();
              Application.Current.Shutdown();
              IsShuttingDown = true;
          }
      }
      

      【讨论】:

        【解决方案3】:

        最后我解决了创建另一个应用程序的问题,该应用程序在主应用程序进程仍在运行时显示一个窗口。

        我知道这不是最好的方法,但我无法以任何其他方式做到这一点..

        感谢支持! :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-20
          • 1970-01-01
          • 1970-01-01
          • 2012-06-21
          • 1970-01-01
          • 1970-01-01
          • 2020-05-02
          相关资源
          最近更新 更多