WPF中的Application类
写 WPF 肯定绕不开 Application 类。这篇文章盘点了它的几个核心属性和控制程序生命周期的关键方法,理清这些,对 WPF 程序的启动和退出流程会有更清晰的认知。
定义
Application类在WPF中程序中代表了当前的应用程序对象,等应用程序对象创建出来以后,可以在程序的任何位置用Application.Current的方式获取该对象。下面先来罗列一下Application提供的属性、方法和事件。
主要属性
Current
类型:System.Windows.Application 在当前的应用域(AppDomain唯一的应用对象),从触发OnStartup事件之后程序的全局位置都可以获取。
MainWindow
类型:System.Windows.Window 一个窗口对象,代表着应用程序的主窗口,没有显式设置的情况,MainWindow属性等于第一个弹出来的窗口对象,后续可以按需设置其他的窗口。
Properties
类型:IDictionary 应用程序的属性集合。可以存储一些全局的<k,v>属性信息
//类似于这种全局的信息
Application.Current.Properties.Add("lang", "en-US");
Application.Current.Properties.Add("version", "1.0.0");Resources
类型:ResourceDictionary 可以获取或设置应用程序的资源字典。
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<SolidColorBrush x:Key="BackgroundColor" Color="Yellow"></SolidColorBrush>
</Application.Resources>
</Application>ShutdownMode
类型:是枚举类型(默认值是0,即OnLastWindowClose——)
- OnLastWindowClose——最后一个窗口对象关闭时,退出程序
- OnMainWindowClose——主窗口关闭时,退出程序
- OnExplicitShutdown——只有显式的关闭时,才退出程序
获取或设置应用程序的关闭模式。
Windows
类型:WindowCollection 获取应用程序的窗口集合。当一个window对象在UI线程上初始化之后会添加到这个集合中,在处理完Closing事件之后会移除。
主要方法
OnActivated
- 应用程序启动的时
- 从最小化回来的时候也会被调用
OnDeactivated
- 关闭程序的时
- 程序最小化
OnExit
最后程序退出之前调用,可以做一些资源回收的事情。类似于python中的atexit模块
Shutdown
显式的关闭当前进程
WPF程序的生命周期
%%{init: {"flowchart": {"nodeSpacing": 18, "rankSpacing": 24, "diagramPadding": 6}, "themeVariables": {"fontSize": "14px"}}}%%
flowchart TB
subgraph Start["启动"]
direction TB
S1["StartUp:Application"] --> S2["Initialized:Window"] --> S3["SourceInitialized:Window"] --> S4["Activated:Application"] --> S5["Activated:Window"]
end
classDef stage fill:#f7f3ff,stroke:#b8ade8,stroke-width:1.5px,color:#3b3553;
class S1,S2,S3,S4,S5 stage;Rendering diagram…
%%{init: {"flowchart": {"nodeSpacing": 18, "rankSpacing": 24, "diagramPadding": 6}, "themeVariables": {"fontSize": "14px"}}}%%
flowchart TB
subgraph Finish["结束"]
direction TB
E1["Closing:Window"] --> E2["Deactivated:Window"] --> E3["Deactivated:Application"] --> E4["Closed:Window"] --> E5["Exit:Application"]
end
classDef stage fill:#f7f3ff,stroke:#b8ade8,stroke-width:1.5px,color:#3b3553;
class E1,E2,E3,E4,E5 stage;Rendering diagram…