详解WPF中的APP生命周期以及全局异常捕获.docxVIP

详解WPF中的APP生命周期以及全局异常捕获.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

详解WPF中的APP生命周期以及全局异常捕获

目录APP生命周期窗体生命周期事件全局异常捕获

APP生命周期

wpf项目目录中有一个App.xaml.cs文件,该文件中App是一个partical类,与之对应的另一partical部分在App.g.i.cs文件中,该文件是在编译的时候WPF自动生成的。程序的入口Main方法在该文件中定义。

[System.STAThreadAttribute()]

[System.Diagnostics.DebuggerNonUserCodeAttribute()]

[System.CodeDom.Compiler.GeneratedCodeAttribute(PresentationBuildTasks,)]

publicstaticvoidMain(){

WpfApp.Appapp=newWpfApp.App();

app.InitializeComponent();//初始化Xaml

app.Run();//程序运行

APP类继承自Application,常见的生命周期事件有以下几个:

Startup:在调用Application对象的Run方法时发生Navigating:在应用程序中的导航器请求新导航时发生(针对Browser类型的应用)LoadCompleted:在已经加载、分析并开始呈现应用程序中的导航器导航到的内容时发生Navigated:在已经找到应用程序中的导航器要导航到的内容时发生,尽管此时该内容可能尚未完成加载NavigationFailed:在应用程序中的导航器在导航到所请求内容时出现错误的情况下发生NavigationProgress:在由应用程序中的导航器管理的下载过程中定期发生,以提供导航进度信息NavigationStopped:在调用应用程序中的导航器的StopLoading方法时发生,或者当导航器在当前导航正在进行期间请求了一个新导航时发生SessionEnding:在用户通过注销或关闭操作系统而结束Windows会话时发生Activated:当应用程序成为前台应用程序时发生,App任意一个窗口激活Deactivated:当应用程序停止作为前台应用程序时发生,App中所有窗口非激活Exit:在应用程序关闭之前发生(无法像SessionEnding事件进行取消)

对于普通窗体程序,从开始到结束会依次调用如下事件

-----App_Startup

-----App_Navigating

-----App_Activated

-----App_Exit

窗体生命周期事件

在APP运行后,会启动窗体,窗体常用的声明周期事件如下:

SourceInitialized:操作系统给窗口分配句柄的时候触发,注意WPF窗体里面的控件是没有句柄的ContentRendered:窗体内容渲染后触发Loaded:窗体布局加载完成即准备好交互后触发Activated:窗体激活Deactivated:窗体失去焦点Closing:调用关闭窗体时触发,此时可以取消操作Closed:窗体关闭后

全局异常捕获

对于异常捕获一般使用try-catch语句进行捕获,但是对于全局的异常可以在App中进行捕获。

DispatcherUnhandledException:在异常由应用程序引发但未进行处理时发生针对UI线程,无法捕获多线程异常AppDomain.CurrentDomain.UnhandledException:专门捕获所有线程中的异常TaskScheduler.UnobservedTaskException:专门捕获Task异常

案例:

APP中进行全局异常捕获

publicpartialclassApp:Application

publicApp()

//在异常由应用程序引发但未进行处理时发生。UI线程

//无法捕获多线程异常

this.DispatcherUnhandledException+=App_DispatcherUnhandledException;

//专门捕获所有线程中的异常

AppDomain.CurrentDomain.UnhandledException+=CurrentDomain_UnhandledException;

//专门捕获Task异常

TaskScheduler.UnobservedTaskException+=TaskScheduler_UnobservedTaskException;

privatevoidA

文档评论(0)

135****8957 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档