- A+
1.Application的生命周期
在WPF中,我们知道App.xaml作为整个整个应用程序的入口,APP类是继承Application类,而Application类继承于DispatcherObject类。Application是的生命周期是怎样的呢?
/// <summary> /// Application的生命周期:OnStartup->OnActivated->OnDeactivated->OnExit /// </summary> public partial class App : Application { /// <summary> /// 1.启动应用程序 /// </summary> /// <param name="e"></param> protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); Console.WriteLine("1.Application的OnStartup被触发"); } /// <summary> /// 2.激活应用程序 /// </summary> /// <param name="e"></param> protected override void OnActivated(EventArgs e) { base.OnActivated(e); Console.WriteLine("2.Application的OnActivated被触发"); } /// <summary> /// 3.由激活状态变为非激活状态 /// </summary> /// <param name="e"></param> protected override void OnDeactivated(EventArgs e) { base.OnDeactivated(e); Console.WriteLine("3.Application的OnDeactivated被触发"); } /// <summary> /// 4.退出应用程序 /// </summary> /// <param name="e"></param> protected override void OnExit(ExitEventArgs e) { base.OnExit(e); Console.WriteLine("4.Application的OnExit被触发"); } }
首先被执行的是OnStartup方法,其次是OnActivated方法,如果我们把当前应用最小化或切换到其它程序时,这时OnDeactivated会被执行,再切回来时再次执行OnActivated方法,最后,当我们关闭程序时,OnDeactivated会再次被执行,最后执行的是OnExit方法。
Application的生命周期:OnStartup->OnActivated->OnDeactivated->OnExit
2.Window窗体的生命周期
窗口类是继承Window类,而Window类继承于ContentControl类-->Control-->FrameworkElement......。Window类的生命周期是怎样的呢?
/// <summary> /// Window窗体的生命周期 /// </summary> 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被执行"); } }
F5调试后可以看到Application和Window两个类的生命周期:
1.Application的OnStartup被触发
1.MainWindow的SourceInitialized被执行
2.Application的OnActivated被触发
2.MainWindow的Activated被执行
3.MainWindow的Loaded被执行
4.MainWindow的ContentRendered被执行
5.MainWindow的Closing被执行
6.MainWindow的Deactivated被执行
3.Application的OnDeactivated被触发
7.MainWindow的Closed被执行
4.Application的OnExit被触发
而单个window的生命周期则是
1.MainWindow的SourceInitialized被执行 2.MainWindow的Activated被执行 3.MainWindow的Loaded被执行 4.MainWindow的ContentRendered被执行 5.MainWindow的Closing被执行 6.MainWindow的Deactivated被执行 7.MainWindow的Closed被执行