【问题标题】:Notification when WPF UI closesWPF UI 关闭时的通知
【发布时间】:2012-10-05 05:57:32
【问题描述】:

我正在从托盘应用程序打开 WPF 窗口。我使用以下代码打开窗口:

        if (gui == null)
        {
            gui = new App();
            gui.MainWindow = new mainWindow();
            gui.InitializeComponent();
            IsUIOpen = true;
        }
        else if (!IsUIOpen)
        {
            gui.InitializeComponent();
            gui.MainWindow.Show();
            gui.MainWindow = new mainWindow();
            IsUIOpen = true;
        }

我需要从应用程序级别运行 UI,因为它使用资源字典。问题是,当用户关闭窗口时,我需要运行代码,但似乎没有事件处理程序通知我。

我尝试了以下方法:

gui.Exit += new System.Windows.ExitEventHandler(settings_FormClosed);
gui.MainWindow.Closed += new EventHandler(settings_FormClosed);

我也尝试过gui.Deactivatedgui.SessionEndinggui.MainWindow.Closinggui.MainWindow.Deactivated,可能还有其他一些。

当用户关闭窗口时,会从 Shell.xaml 调用此代码:

    private void Cancel_Click(object sender, RoutedEventArgs e)
    {
        presenter.Close();
        this.Close();
    }

我意识到 App 是静态的,所以它永远不会关闭,但是这些事件处理程序之一应该将我连接到关闭事件。

如果有用的话,流程如下:TrayApp.cs -> App.xaml -> Shell.xaml

任何建议将不胜感激。提前致谢。

【问题讨论】:

    标签: c# wpf event-handling


    【解决方案1】:

    您应该尝试Closing 事件。 This article 提供有关 WPF 何时实际关闭(不仅仅是窗口)的有用信息。

    【讨论】:

    【解决方案2】:

    乔希能够给出正确的解决方案。你可以看到他的回答here

    基本上,我需要将 WPF 作为一个单独的进程启动,然后使用 MyProcess.WaitForEnd() 调用。我将它添加到一个线程中,这样它就不会阻塞托盘。代码如下:

    Process myProcess = new Process();
    myProcess.StartInfo.UseShellExecute = false;
    myProcess.StartInfo.FileName = "C:\\mysettingsapp\\mysettingsapp.exe"; // replace with path to your settings app
    myProcess.StartInfo.CreateNoWindow = false;
    myProcess.Start();
    // the process is started, now wait for it to finish
    myProcess.WaitForExit();  // use WaitForExit(int) to establish a timeout
    

    【讨论】:

      猜你喜欢
      • 2023-02-07
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 2022-06-20
      相关资源
      最近更新 更多