首页 > 其他分享 >1.Application和Window窗体的生命周期

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

时间:2024-01-28 11:13:56浏览次数:27  
标签:Console Application Window 窗体 WriteLine 执行 MainWindow

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

 

标签:Console,Application,Window,窗体,WriteLine,执行,MainWindow
From: https://www.cnblogs.com/MingQiu/p/17992568

相关文章

  • 2024新版Windows 11要来了!16GB内存需求引热议 只是推荐配置
    最近,TrendForce集邦咨询的一份报告指出,微软已经将AIPC的内存基线设置为16GB。有媒体表示,这也意味着,新版Windows11的AI功能需要至少16GB内存才能运行。消息曝光后引发热议。对此,WC报道称,微软尚未就上述内存需求发表官方评论。16GB内存很可能只是微软的推荐配置,而非最低配置要求。W......
  • windows console prompt modification
    bysettingprompttobe$d$t@$p$_$g$Sinenvironmentvariables.referenceChangeyourDOS/Commandprompthttp://www.chami.com/tips/windows/020497W.htmlcmd-HowdoIchangethecommand-linepromptinWindows?-StackOverflowhttps://stackoverflow.c......
  • Windows 下 Nginx 配置 多个conf 文件的过程与注意事项
    Windows下配置Nginx使用多个conf文件的Include路径与Linux有所不同。 如上:Windows:include../conf.d/*.confLinux:include /etc/nginx/conf.d/*.conf; 分别来看单个配置文件的内容:总配置文件nginx.conf###########################################......
  • 又学了一招:微软科普Windows 11电脑自动清理释放硬盘
    你是不是每次都等到电脑内存被占满,磁盘“红”成一片,才想起来去清理那些没用的程序or文件?今天微软官方科普了一个小技巧:既然都用上了Windows11,为什么不让电脑帮你自动清理呢?开启存储感知功能,再不用自己动手,电脑就能通过清理回收站文件和临时文件,帮你的内存空间“自动瘦身”。......
  • start cmd or shell from current directory in windows file explorer
    startwindowscmdincurrentdirectoryMypreferanceofstartingcmdinacertaincertaindirectoryissimplynavigatingtothedirectroy;pressingctrl+Ltofocustheaddressbar;typingcmd+enter.Bythisway,anewconsolewindowwillstartandit......
  • PowerShell编写Windows服务器的DDNS-ipv6客户端
    这个代码保存成ddnsv6.fm20.cn.ps1就能正常运行了functionGet-GUID(){#指定注册表路径$path="HKLM:\Software\Firadio\ddnsv6.fm20.cn"#如果注册表路径不存在则创建if(-not(Test-Path$path)){New-Item-Force-Path$path>$null}......
  • Burp Suite Professional 2024.1.1 (macOS, Linux, Windows) - Web 应用安全、测试和
    BurpSuiteProfessional2024.1.1(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:https://sysin.org/blog/burp-suite-pro/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgB......
  • Burp Suite Professional 2024.1.1 for Windows x64 (sysin) - 世界排名第一的网络渗
    BurpSuiteProfessional2024.1.1forWindowsx64(sysin)-世界排名第一的网络渗透测试工具包请访问原文链接:https://sysin.org/blog/burp-suite-pro-win/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgBurpSuiteProfessionalTheworld’s#1webpenetration......
  • Windows内核开发-[4]、内核编程基础(1)
    在前面的文章中,介绍了如何配置开发环境以及如何进行调试。接下来的几篇文章,将会重点介绍内核编程中所需要了解的一些理论基础。我写这个系列文章的主要目的是方便以后自己查阅,同时也给正在学习内核开发的小伙伴一些参考,所以我会尽可能地以最简单的方式进行描述。如果在阅读过程......
  • windowForm程序的webView2错误 System.IO.FileNotFoundException: 系统找不到指定的文
    最近开发公司的一个项目,要求打包在windows中执行的exe可执行文件开始我想到的是使用windowsForm里面webView嵌套网页执行,vs自带提供的WebBrowser的内核是ie7的,兼容性确实不好,后面使用Microsoft.Web.WebView2(通过NuGet安装)兼容性问题解决了。在我的电脑上可以完整的运行,但是在同......