Application生命周期
在前面,我们知道打开了隐藏代码app是继承了application的。

app什么都没有给我们展示,那自然要求看看application里面有什么东西。
使用override可以看app可以重写applicaition的哪些方法。

override官方文档这么写的,不需要理解太深,容易晕:

简单说就是字面意思,对基类方法的新实现。
正是如此,肯定是applicaiton里面有些方法可以提供给app重写,从而实现在程序启动和程序关闭中各种操作。**让我们去找找这些方法!**看到图二中onexit()方法,双击application找找。

-
- OnStartup (程序启动)
- OnActivated (窗口首次激活)
- OnDeactivated (重新激活)
- OnExit (程序退出)
就是这些了!
为了验证一下重写的效果和applicaiton的周期的效果,我们可以在4个周期中打印语出出来。
cs
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);//执行applicaiton父类方法
Console.WriteLine("Onstartup方法执行");
}
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
Console.WriteLine("OnActivated方法执行");
}
protected override void OnDeactivated(EventArgs e)
{
base.OnDeactivated(e);
Console.WriteLine("OnDeactivate方法执行");
}
protected override void OnExit(ExitEventArgs e)
{
base.OnExit(e);
Console.WriteLine("OnExit方法执行");
}
}
效果如下:
启动项目,onstartup方法执行,OnActivated执行,激活窗口。红线部分为打印出来的字符串。

窗口关闭会先失去激活(OnDeactivated),再关闭(Onexit)。

窗口不关闭,但是最小化和最大化,都会执行激活和失去激活。
application生命周期大致就是这样了,很多事情可以在周期中执行!
主窗体Window的生命周期
同理,Mainwindow继承于window

不停往下点,我们发现:
- 继承路线:MainWindow → Window → ContentControl → Control → FrameworkElement → UIElement → Visual → DependencyObject → DispatcherObject
- 顶级父类:DispatcherObject是WPF中的顶级抽象类,所有UI元素的基类(DispatcherObject后面会被认识)
老师采用了在构造函数中,使用事件+匿名函数的方式进行打印。

构造函数(官方文档):

简单点说,就是实例化的时候会调用的一个函数。
事件的介绍:

官方文档中,关于订阅事件是这么描述的:

匿名函数官方是这么说的:

貌似没看懂,是涉及到Lambda表达式,面试经常使用,需要重点关注。

上面主要是了解**事件订阅(采用"+="符号)和匿名函数("=>")。作用就是在窗口各种方法执行的时候,触发相应的打印事件。**不需要深入理解,理解大概操作,现在主要就是看Window生命周期。
cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.SourceInitialized += (s, e) => Console.WriteLine("1、MainWindow.SourceInitialized被触发");
this.Activated += (s, e) => Console.WriteLine("2、MainWindow.Activated被触发");
this.Loaded += (s, e) => Console.WriteLine("3、MainWindow.Loaded被触发");
this.ContentRendered += (s, e) => Console.WriteLine("4、MainWindow.ContentRendered 被触发");
this.Deactivated += (s, e) => Console.WriteLine("5、MainWindow.Deactivated被触发");
this.Closing+=(s,e)=>Console.WriteLine("6、MainWindow.Closing被触发");
this.Closed += (s, e) => Console.WriteLine("7、MainWindow.Closed被触发");
this.Unloaded+=(s,e)=>Console.WriteLine("8、MainWindow.Unloaded被触发");
}
}
结果是这样的(启动和关闭):


大概流程是这样的(window周期):

有点晚了,先简单收尾,明天补充,广东不知啥天气,一冷一热感觉浑身难受,注意身体。
--------------2026、1、13-----------------------------------------------------