WPF中的APP生命周期及全局异常捕获源码分析(app,wpf,开发技术)

时间:2024-04-29 19:51:06 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    WPF%E4%B8%AD%E7%9A%84APP%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E5%8F%8A%E5%85%A8%E5%B1%80%E5%BC%82%E5%B8%B8%E6%8D%95%E8%8E%B7%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90

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

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中进行全局异常捕获

窗体中抛异常

备注:Task中的异常并不是立刻就能捕获到的,而是等到垃圾回收的时候进行捕获。如果想立刻进行捕获则可以调用GC.Collect(0);GC.WaitForPendingFinalizers();

本文:WPF中的APP生命周期及全局异常捕获源码分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:python中的循环结构问题如何解决下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18