C# WPF UI关闭时的通知

C# WPF UI关闭时的通知,c#,wpf,event-handling,C#,Wpf,Event Handling,我正在从托盘应用程序打开WPF窗口。我使用以下代码打开窗口: if (gui == null) { gui = new App(); gui.MainWindow = new mainWindow(); gui.InitializeComponent(); IsUIOpen = true; } else if (!IsUIOpen)

我正在从托盘应用程序打开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.Deactivated
gui.sessioning
gui.MainWindow.Closing
gui.MainWindow.Deactivated
,可能还有其他一些方法

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

    private void Cancel_Click(object sender, RoutedEventArgs e)
    {
        presenter.Close();
        this.Close();
    }
我意识到应用程序是静态的,所以它永远不会关闭,但其中一个事件处理程序应该将我连接到一个关闭事件

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


如有任何建议,将不胜感激。提前谢谢。

你应该试试这个活动。提供有关WPF何时实际关闭(不仅仅是窗口)的有用信息。

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

Josh能够给出正确的解决方案。你可以看到他的答案

基本上,我需要作为一个单独的进程启动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

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

基本上,我需要作为一个单独的进程启动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

谢谢你的回复,达米安,但我已经试过了闭幕式。当我关闭UI时,它似乎不会启动。奇怪的是,当我关闭整个应用程序时,它也不会启动。嗯,这有帮助吗?谢谢你的回复,达米安,但我已经试过了闭幕式。当我关闭UI时,它似乎不会启动。奇怪的是,当我关闭整个应用程序时,它也不会启动。嗯,这有帮助吗?