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

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

 

posted @ 2024-01-28 10:59  野码  阅读(110)  评论(0编辑  收藏  举报