由于隐藏的主窗口实例,WPF应用程序不会关闭

时间:2015-09-18 08:33:10

标签: c# wpf visual-studio-2013 window

我的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();
    }

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

2 个答案:

答案 0 :(得分:0)

这不是您问题的准确答案,因为我无法知道为什么有两个MainWindow实例,但您可以将用户设置保存到Application.ApplicationExit(WinForms)或{ {1}}(WPF)方法,只有在调用Application.Current.Exit后才会被调用一次。

答案 1 :(得分:0)

哦,终于明白了。在App.xaml文件中,无需确定主窗口属性明确性。所以,这段代码不仅冗余,而且还调用了窗口构造函数:

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

仅更改StartupUri属性就足够了。

希望它会对某人有所帮助。