介绍
在WPF开发当中, 最常见的应用程序关闭的方式就是, 除非用户手动调用给当前应用Shutdown, 那么都是在应用启动单个窗口后, 然后程序默认调用Shutdown结束应用。
而开发的过程中, 我们常用不同的情况, 例如我们希望最开始启动单个窗口后, 我们希望关闭之后, 再启用另外一个窗口, 那么WPF当中, AppDomain提供了ShutdownMode
也就是应用程序关闭的模板供用户选择。
OnLastWindowClose
该项为WPF中的默认项, 指的是当最后一个窗口关闭时,应用程序将关闭或 System.Windows.Application.Shutdown 调用。
如下所示, 默认创建WPF应用后, 可以看见App.xaml设定了StartupUrl
<Application x:Class="WpfApp7.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp7" StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
当我们应用第一次加载后, 将为当前得AppDomain的MainWindow 设定StartupUri的值, 当我们的窗口手动Close之后, 那么WPF就会自己隐氏调用了ShutDown结束程序。
OnMainWindowClose
当主窗口关闭时,应用程序将关闭或 System.Windows.Application.Shutdown 调用。
OnExplicitShutdown
应用程序关闭时,才 System.Windows.Application.Shutdown 调用。
这种模式常用于, 打开了单个窗口之后, 需要关闭窗口再打开其他的窗口, 除非手动调用Shutdown, 否则程序不会自动关闭程序。(例如: 用户登录窗口, 过度到引用的主界面中)
结语引用
仅当调用应用程序的关机方法时,应用程序才停止运行。关闭可以隐式或显式发生,如"关机模式"属性的值指定。
如果将关机模式设置为OnLastWindowClose,则WPF隐式调用Shutdown,当应用程序中的最后一个窗口关闭时,即使任何当前实例化的窗口都设置为主窗口。
OnMainWindowClose的ShutdownMode会导致WPF在主窗口关闭时隐式调用关机,即使其他窗口当前处于打开状态也是如此。
某些应用程序的生存期可能不依赖于主窗口或最后一个窗口何时关闭,或者可能根本不依赖于窗口。
对于这些方案,您需要将"关闭模式"属性设置为OnExplicit 关机,这需要显式关闭方法调用才能停止应用程序。否则,应用程序将继续在后台运行。
关机模式可以从 XAML 进行声明性配置,也可以从代码以编程方式配置。此属性仅从创建应用程序对象的线程中可用。