1.Application和Window窗体的生命周期

  • 1.Application和Window窗体的生命周期已关闭评论
  • 65 次浏览
  • A+
所属分类:.NET技术
摘要

1.Application的生命周期  在WPF中,我们知道App.xaml作为整个整个应用程序的入口,APP类是继承Application类,而Application类继承于DispatcherObject类。Application是的生命周期是怎样的呢?

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被执行