【wpf】Application与AppDomain(未完成,待完善)

2024-01-21 06:48

本文主要是介绍【wpf】Application与AppDomain(未完成,待完善),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Application 实现单一实例模式,以提供对其窗口、属性和资源范围服务的共享访问权限。 因此,每个 AppDomain(应用程序域)中仅且只有一个 Application 实例存在。

我们在写WPF的程序的时候,你根本没有创建Application与AppDomain的对象,但是你已经可以使用它们的对象了。

跳到App内部,可以看到如下代码(这段代码是VS自动生成的)。

这让我想到了MFC中的theApp,它管理了整个应用程序的流程。

继承关系:

Application 是封装 WPF 应用程序特定功能的类,包括:

  • 应用程序生存期:Activated、、Current、、RunSessionEndingDeactivatedExitShutdownDispatcherUnhandledException、。 StartupShutdownMode

  • 应用程序范围窗口、属性和资源管理:FindResource、、GetContentStream、、GetResourceStream、LoadComponent、MainWindowProperties、Resources、StartupUri。 Windows

  • 命令行参数和退出代码处理:Application.Startup、、Application.ExitApplication.Shutdown。

  • 导航:FragmentNavigation、、LoadCompleted、Navigated、NavigationProgressNavigating、NavigationStoppedNavigationFailed、、SetCookie。 GetCookie

 AppDomain 像是Application的运行容器。一个进程可以创建多个AppDomain。AppDomain一般用于插件模式。这样主程序可以动态的加载可卸载其他AppDomain(插件),插件的崩溃也不会影响主程序。


下面是Application 和  AppDomain  常用的一些地方的小结:

Application 和  AppDomain  可用于,全局异常捕获!我们自定义的异常也是可以捕获到。

public App(){//UI线程异常this.DispatcherUnhandledException += App_DispatcherUnhandledException;//非UI线程异常AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;}/// <summary>/// UI线程异常/// </summary>/// <param name="sender"></param>/// <param name="e"></param>/// <exception cref="NotImplementedException"></exception>private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e){e.Handled = true; // 消息不再继续往下流了(会流到,CurrentDomain_UnhandledException 非UI线程异常处理)string msg = e.Exception.Message;string func_name = e.Exception.TargetSite.Name;string str_err = $"错误信息:{msg},| 调用方法:{func_name}";logger.Error(str_err);MessageBox.Show(str_err);//throw new NotImplementedException();}/// <summary>/// 非UI线程异常/// </summary>/// <param name="sender"></param>/// <param name="e"></param>/// <exception cref="NotImplementedException"></exception>private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e){logger.Error(e.ExceptionObject);throw new NotImplementedException();}

如果想在子线程里,更新界面信息,我们可以用到Application.Current.Dispatcher

在WPF中,所有的WPF对象都派生自DispatcherObject,DispatcherObject暴露了Dispatcher属性用来取得创建 对象线程对应的Dispatcher。DispatcherObject对象只能被创建它的线程所访问,其他线程修改 DispatcherObject需要取得对应的Dispatcher,调用Invoke或者BeginInvoke来投入任务。(Invoke和BeginInvoke等从WinForm时代就是一直存在的,WPF使用了Dispatcher来封装这些线程级的操作。原理和就是WINAPI中的PostMessage)

        private void GuiHandler(){ushort CardID = 0;while (LoopGui){Application.Current.Dispatcher.BeginInvoke(new Action(() =>{// 改变界面UI// 相当于将更新消息投递到,界面处理消息队列}));Thread.Sleep(500);}}

在程序的任何地方调用System.Windows.Application.Current(Application类型),都能得到app对象,不过记得将其转换成我们自己的App的类型!

这篇关于【wpf】Application与AppDomain(未完成,待完善)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/628686

相关文章

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

python安装完成后可以进行的后续步骤和注意事项小结

《python安装完成后可以进行的后续步骤和注意事项小结》本文详细介绍了安装Python3后的后续步骤,包括验证安装、配置环境、安装包、创建和运行脚本,以及使用虚拟环境,还强调了注意事项,如系统更新、... 目录验证安装配置环境(可选)安装python包创建和运行Python脚本虚拟环境(可选)注意事项安装

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密

(南京观海微电子)——GH7006 Application Note

Features ⚫ Single chip solution for a WXGA α-Si type LCD display ⚫ Integrate 1200 channel source driver and timing controller ⚫ Display Resolution: ◼ 800 RGB x 480 ◼ 640 RGB x 480 ⚫ Display int

WPF入门到跪下 第十三章 3D绘图 - 3D绘图基础

3D绘图基础 四大要点 WPF中的3D绘图涉及4个要点: 视口,用来驻留3D内容3D对象照亮部分或整个3D场景的光源摄像机,提供在3D场景中进行观察的视点 一、视口 要展示3D内容,首先需要一个容器来装载3D内容。在WPF中,这个容器就是Viewport3D(3D视口),它继承自FrameworkElement,因此可以像其他元素那样在XAML中使用。 Viewport3D与其他元素相

如何完成本科毕业论文设计

完成本科毕业论文设计是一个系统性的工程,需要经过多个阶段的规划、执行和总结。以下是一个详细的步骤指南,帮助你顺利完成本科毕业论文设计。 ### 1. 选题与开题 - **选题**:选择一个有研究价值且你感兴趣的题目。与导师讨论,确保题目具有可行性和创新性。 - **开题报告**:撰写开题报告,包括研究背景、研究目的、研究内容、研究方法、预期成果等。 ### 2. 文献综述 - **文献检索**

LabVIEW环境中等待FPGA模块初始化完成

这个程序使用的是LabVIEW环境中的FPGA模块和I/O模块初始化功能,主要实现等待FAM(Field-Programmable Gate Array Module,FPGA模块)的初始化完成,并处理初始化过程中的错误。让我们逐步分析各部分的功能: 1. Wait for FAM Initialization框架 此程序框架用于等待I/O模块成功初始化。如果在5秒钟内模块没有完成配