我习惯了在Visual Studio中进行WinForms编程,但我想试一试。
我在项目中添加了另一个窗口,名为Window01。主窗口名为MainWindow。在public MainWindow()
构造函数之前,我声明了Window01:
Window01 w1;
现在我在下面的代码中实例化这个窗口:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
w1 = new Window01();
}
我在显示窗口的地方有一个按钮:w1.ShowDialog();
。
有趣的是,如果我启动应用程序(进行调试)并在几秒钟后退出(我在应用程序中不做任何事情),Visual Studio不会停止调试,就好像应用程序仍在运行一样。
如果我将行w1 = new Window01();
移到button click方法,意思就是在ShowDialog()
上面,Visual Studio运行正常-也就是说,当我退出应用程序时,调试停止。
为什么会有这种奇怪的行为呢?
发布于 2012-04-03 20:14:41
因为WPF应用程序中的默认shutdown mode是OnLastWindowClose,这意味着应用程序在最后一个窗口关闭时停止。
当您实例化一个新窗口对象时,它会自动添加到应用程序的list of windows中。因此,问题是应用程序在启动时创建了两个窗口- MainWindow和尚未显示的Window01 -如果您只关闭MainWindow,Window01将使您的应用程序继续运行。
通常,您将在将要调用其ShowDialog的相同方法中创建一个window对象,并在每次显示对话框时创建一个新的window对象。
发布于 2019-12-10 18:39:48
以上这些对我来说都不起作用,可能是因为我们的项目使用了棱镜。所以最终在App.XAML.cs中使用了这个
protected override void OnExit(ExitEventArgs e)
{
base.OnExit(e);
Process.GetCurrentProcess().Kill();
}
发布于 2016-04-07 09:18:07
它看起来像是我在创建第二个窗口作为对话框时遇到的东西。当第二个窗口打开,然后关闭,然后关闭主窗口,应用程序继续运行(在后台)。我在我的App.xaml中添加(或确认)了以下内容:
<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“方法,如下所示:
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“。
那么,如果没有这些额外的东西,为什么对话框不会关闭呢?哦,好吧。这是可行的。
https://stackoverflow.com/questions/9992119
复制相似问题