WPF应用程序不会因为主窗口实例不可见而关闭

本文关键字:实例 窗口 应用程序 因为 WPF | 更新日期: 2023-09-27 18:13:20

我的WPF应用程序发生了一些神秘的事情。我更改了主窗口,关闭后应用程序不关闭。这是我的App.xaml:

    <Application
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:LogAnalysis" x:Class="LogAnalysis.App"
         StartupUri="ChartWindow.xaml" ShutdownMode="OnMainWindowClose">
        <Application.MainWindow>
            <local:ChartWindow/>
        </Application.MainWindow>
    </Application>

我试图找出为什么进程关闭后仍然活着,并写了这个:

    foreach (var window in Application.Current.Windows)
    {
        MessageBox.Show((window as Window).Title);
    }

显示具有相同消息的两个消息框。所以,看起来好像有两个主窗口实例在一个app实例中运行。

我不能用这个解决方案:

    protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);
        Application.Current.Shutdown();
    }

WPF应用程序不会因为主窗口实例不可见而关闭

因为Window.Closing事件被触发两次,因为窗口的第二个实例(并且它破坏了用户设置)。

不是说这是你的问题的确切答案,因为我没有办法知道为什么有两个MainWindow实例,但是你可以将用户设置的保存移动到Application.ApplicationExit (WinForms)或Application.Current.Exit (WPF)方法,这只会被调用一次,在调用Shutdown()之后。

哦,终于明白了。在App.xaml文件中,不需要确定主窗口属性的显式性。所以,这段代码不仅是多余的,它还调用了窗口构造函数:

    <Application.MainWindow>
        <local:ChartWindow/>
    </Application.MainWindow>

只修改StartupUri属性就足够了。

希望对大家有所帮助。