首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >关闭主窗口时WPF应用程序不会关闭

关闭主窗口时WPF应用程序不会关闭
EN

Stack Overflow用户
提问于 2012-04-03 19:14:26
回答 3查看 76.8K关注 0票数 88

我习惯了在Visual Studio中进行WinForms编程,但我想试一试。

我在项目中添加了另一个窗口,名为Window01。主窗口名为MainWindow。在public MainWindow()构造函数之前,我声明了Window01:

代码语言:javascript
复制
Window01 w1;

现在我在下面的代码中实例化这个窗口:

代码语言:javascript
复制
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    w1 = new Window01();            
}

我在显示窗口的地方有一个按钮:w1.ShowDialog();

有趣的是,如果我启动应用程序(进行调试)并在几秒钟后退出(我在应用程序中不做任何事情),Visual Studio不会停止调试,就好像应用程序仍在运行一样。

如果我将行w1 = new Window01();移到button click方法,意思就是在ShowDialog()上面,Visual Studio运行正常-也就是说,当我退出应用程序时,调试停止。

为什么会有这种奇怪的行为呢?

EN

回答 3

Stack Overflow用户

发布于 2012-04-03 20:14:41

因为WPF应用程序中的默认shutdown mode是OnLastWindowClose,这意味着应用程序在最后一个窗口关闭时停止。

当您实例化一个新窗口对象时,它会自动添加到应用程序的list of windows中。因此,问题是应用程序在启动时创建了两个窗口- MainWindow和尚未显示的Window01 -如果您只关闭MainWindow,Window01将使您的应用程序继续运行。

通常,您将在将要调用其ShowDialog的相同方法中创建一个window对象,并在每次显示对话框时创建一个新的window对象。

票数 11
EN

Stack Overflow用户

发布于 2019-12-10 18:39:48

以上这些对我来说都不起作用,可能是因为我们的项目使用了棱镜。所以最终在App.XAML.cs中使用了这个

代码语言:javascript
复制
    protected override void OnExit(ExitEventArgs e)
    {
        base.OnExit(e);
        Process.GetCurrentProcess().Kill();
    }
票数 2
EN

Stack Overflow用户

发布于 2016-04-07 09:18:07

它看起来像是我在创建第二个窗口作为对话框时遇到的东西。当第二个窗口打开,然后关闭,然后关闭主窗口,应用程序继续运行(在后台)。我在我的App.xaml中添加(或确认)了以下内容:

代码语言:javascript
复制
<Application x:Class="XXXXXXX.App"
             ...  
             StartupUri="MainWindow.xaml"
             ShutdownMode="OnMainWindowClose">
    <Application.MainWindow >
        <NavigationWindow Source="MainWindow.xaml" Visibility="Visible" />
    </Application.MainWindow>

一点也不快乐。

因此,我最终进入了我的"MainWindow.xaml“,并向窗口添加了一个"Closed”属性,该属性转到了一个"MainWind_Closed“方法,如下所示:

代码语言:javascript
复制
 private void MainWind_Closed(object sender, EventArgs e)
        {
            foreach ( Window w in App.Current.Windows )
            {
                if (w.DataContext != this)
                    w.Close();
            }
        }

通过调试器运行,看起来唯一显示的窗口是我创建为对话框的窗口--换句话说,foreach循环只找到一个窗口--对话框,而不是主窗口。

我让"this.Close()“在关闭对话框的方法中运行,在"dlgwin.ShowDialog()”之后有一个"dlgwin.Close()“,但这不起作用。甚至没有"dlgwin = null“。

那么,如果没有这些额外的东西,为什么对话框不会关闭呢?哦,好吧。这是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9992119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档