WPF APP生命周期和全局异常捕获

应用启动事件与启动参数

属性查找

选择想要控件的事件,可以在控件上鼠标右击选择属性,在右上角点击闪电符号即可看到这个控件的所有事件:

APP.Run()启动方法:

打开项目中这个文件:

".....\XH.EventLesson\obj\Debug\net7.0-windows\App.g.i.cs"

APP启动事件:

需求:当程序运行的时候 exe 传递参数 dotnet run .....

更新:更新程序不允许双击打开 主程序获取更新列表提交到更新程序

Main.exe 需要收参数

调试版本(更多的日志输出)/生产版本(执行效率)

业务场景:应用独立启动 不允许多开,可以在这里检查进程

public App()
{// APP 启动的时候 触发this.Startup += App_Startup;
}private void App_Startup(object sender, StartupEventArgs e){MessageBox.Show(string.Join(',',e.Args));}
在启动APP的时候,传参方法:
  1. 打开项目属性--> 调试--> 打开调试启动配置文件 UI

设置想要穿的参数即可

启动项目时候,会有:看到参数过来了

  1. 使用命令行 :打开应用程序目录 cmd 输入项目名 + 后面的参数

  1. 命令行也可以包装为bat文件
  2. 创建快捷方式,在快捷方式目标后面添加参数:

应用退出事件

Exit APP退出事件

作用域:整个APP,在App.xaml中写

需求:一般在APP关闭之前,完成所有的日志记录 和 数据保存

public App()
{// APP 退出时触发this.Exit += App_Exit;
}
private void App_Exit(object sender, ExitEventArgs e)
{// 日志记录 数据保存Debug.WriteLine("APP---Exit");
}

注意

如果没有任何窗口运行 则启用这个方法 退出

杀进程 不调用此方法

Close() 窗口关闭事件

作用域:当前窗口

需求:需要关闭当前弹窗/窗口

private void Button_Click(object sender, RoutedEventArgs e)
{// 当前页面退出this.Close();
}
Application.Current.Shutdown() APP退出事件

作用域:整个APP,在使用的地方写

需求:一般在退出的时候写,这个退出之前,执行APP的Exit事件

private void Button_Click1(object sender, RoutedEventArgs e)
{// APP 退出Application.Current.Shutdown();
}
System.Environment.Exit(0) 杀死进程

作用域:整个APP,在使用的地方写

需求:在有不可以退出,有线程的地方写

注意:杀进程不调用APP的Exit方法,会导致数据丢失

 private void Button_Click2(object sender, RoutedEventArgs e){// 系统环境退出 杀进程 不执行App_Exit事件System.Environment.Exit(0);}
SessionEnding 操作系统退出
public App()
{// 操作系统退出的时候触发this.SessionEnding += App_SessionEnding;
}private void App_SessionEnding(object sender, SessionEndingCancelEventArgs e){// 操作系统关闭时触发// 关闭电脑是 弹出 仍要关闭/取消 按钮e.Cancel = true;}

关闭电脑是 弹出 仍要关闭/取消 按钮

全部异常捕获

public App()
{// Dispatche UI 线程 未被处理的异常 最后一道关卡 this.DispatcherUnhandledException += App_DispatcherUnhandledException;// 全局处理 全局捕获异常 但是不可以捕获Task的异常AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;// 处理Task没有捕获到全局异常TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
}
// 在垃圾回收机制触发的时候,才能捕捉到Task异常
private void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e)
{// 
}
// 全局处理异常 不可以捕获Task
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{// 可以记录下日志
}
// 处理UI异常
private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{MessageBox.Show(e.Exception.Message);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/401587.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW多协议智能流水线控制与监控系统

在自动化流水线系统,实现对流水线传送带、机械臂、报警系统、扫码机、喷码机等设备的高效控制和实时监控。该系统需要支持多种通信协议,包括UDP、串口、ModbusTCP、HTTP、以及MQTT协议,以确保各个设备间的无缝连接和数据交换。 系统架构与模…

论文阅读-Transformer Layers as Painters

1. 摘要 尽管大语言模型现在已经被广泛的应用于各种任务,但是目前对其并没有一个很好的认知。为了弄清楚删除和重组预训练模型不同层的影响,本文设计了一系列的实验。通过实验表明,预训练语言模型中的lower和final layers与中间层分布不一致…

线程的退出

方式1 pthread_exit Void pthread_exit (void *retval) 功能: 结束调用的线程 参数: retval //退出状态值 //需要传的是,退出状态值的地址 注意: 1.pthread_exit 本身表示结束线程 如果用在main函数中 表示结束主线程…

【MySQL进阶】事务、存储引擎、索引、SQL优化、锁

一、事务 1.概念 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向 系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 例子:转账,要求扣钱和进账…

渗透实战——为喜欢的游戏“排忧解难”

本文仅用于技术研究学习,请遵守相关法律,禁止使用本文所提及的相关技术开展非法攻击行为,由于传播、利用本文所提供的信息而造成任何不良后果及损失,与本账号及作者无关。 资料查询来源- 安全社区与AI模型结合探索【文末申请免费…

autoware中ROS2学习笔记

文章目录 一、学习资料:1.1、说明1.2、Autoware Documentation1.3、Autoware Universe Documentation1.4、总结 二、概述三、ros2--节点组件什么是组件容器组件的实现原理可组合节点--节点组件什么是节点组件为什么需要可组合节点创建可组合节点时构造函数为什么需要…

三级_网络技术_27_计算机网络环境及应用系统的安装与调试

1.对于频繁改变位置并使用DHCP获取PP地址的DNS客户端,为减少对其资源记录的手动管理,可采取的措施是()。 允许动态更新 使用反向查找区域 增加别名记录 设置较小的生存时间 2.下列Windows 2003系统命令中,可以清空DNS缓存(DNScache)的是…

svn文件定时全量备份

在win11操作系统中,使用定时任务脚本的方式实现对SVN文件的定时备份 SVN备份脚本 1 创建脚本simpleBackup.bat 该脚本主要用于实现备份过程的信息展示 echo 正在备份版本库%1...... md %BACKUP_DIRECTORY%\%2 %SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_D…

mongodb连表查询,postman使用

要实现与SQL类似的查询,你需要使用聚合框架(Aggregation Framework) SELECT b.name, a.* FROM user a LEFT JOIN order b ON a.id b.id WHERE b.name LIKE %acd%; 从MongoDB 3.2版本开始,引入了聚合框架中的$lookup阶段&#xf…

AI人工智能 卷积神经网络(CNN)

AI人工智能 卷积神经网络(CNN) 卷积神经网络与普通神经网络相同,因为它们也由具有可学习的权重和偏差的神经元组成。 普通的神经网络忽略了输入数据的结构,所有的数据在送入网络之前都被转换为一维数组。 该过程适合常规数据&…

【Java日志系列】Log4j日志框架

目录 前言 一、Log4j简介 二、Log4j组件介绍 1. Loggers 2. Appenders 3. Layouts 三、快速入门 1. 入门代码 2. 日志级别 四、配置文件的使用 五、自定义日志输出格式 六、配置不同的Appender 1. 输出到文件 2. 输出到数据库 七、自定义Logger配置 总结 前言…

超简单理解LSTM和GRU模型

目录 参考资料 RNN在反向传播时容易遭受梯度消失的问题,而梯度是用于更新神经网络权重的关键因子,梯度消失描述的是梯度在时间序列反向传播中逐渐减小的情况。 若梯度过小,它对于网络的学习贡献甚微。结果是,在RNN中,梯…

unity游戏开发003:深入理解Unity中的坐标系

Unity游戏开发 “好读书,不求甚解;每有会意,便欣然忘食。” 本文目录: Unity游戏开发 Unity游戏开发深入理解Unity中的坐标系前言1. 坐标轴2. 左手坐标系3. 世界坐标系 vs. 局部坐标系4. 坐标变换5. 注意事项 总结 深入理解Unity中…

基于STM32开发的智能家居温控系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家庭智能温控办公室环境监测常见问题及解决方案 常见问题解决方案结论 1. 引言 智能家居温控系统通过整合温度传感器、湿度传感器、风扇和加热器等硬件&#xf…

【数据结构进阶】哈希的应用

🔥个人主页: Forcible Bug Maker 🔥专栏: C || 数据结构 目录 🌈前言🔥位图位图的概念位图的实现位图的变体 🔥布隆过滤器布隆过滤器的概念布隆过滤器的插入布隆过滤器的查找布隆过滤器的删除布…

Windows 10/11和Linux双系统用户请勿安装最新更新 否则将无法启动

据蓝点网报道,Windows 10/11 最新累积更新存在已知问题,如果你同时安装了 Linux 双系统则会在更新后导致系统无法正常启动。 启动时会出现如下报错: Verifiying shim SBAT data failed: Security Policy Violation.Something has gone serio…

Python 绘图入门

数据可视化的概念及意义 数据可视化有着久远的历史,最早可以追溯至10世纪,至今已经应用和发展了数百年。不知名的天文学家是已知的最早尝试以图形方式显示全年当中太阳,月亮和行星的位置变化的图。 图1 数据可视化的发展历程 什么是数据可视…

顶级期刊TMI论文解读┆PLHN: 用于DCE-MRI影像中乳腺肿瘤分割的原型学习引导混合网络

一、论文简介 本推文详细介绍了一篇上海理工大学健康科学与工程学院医学信息工程研究所(以下简称为医信所)周雷副教授课题组的最新论文《Prototype Learning Guided Hybrid Network for Breast Tumor Segmentation in DCE-MRI》,该论文发表在…

【Rust】使用开源项目搭建瓦片地图服务

本文通过获取在线和离线地图数据,使用开源Rust项目搭建瓦片地图服务,并使用DevExpress的MapControl控件使用自建地图服务 获取地图数据 获取地图数据有很多种方式,这里分别用在线和离线地图数据举例说明 在线下载瓦片地图 打开在线瓦片地…

搭建内网开发环境(一)|基于docker快速部署开发环境

引言 最近因需要搭建一套简易版的纯内网的开发环境,服务器采用 centos8.0,容器化技术采用 docker 使用 docker-compose 进行容器编排。 该系列教程分为两大类: 软件安装和使用,这类是开发环境常用的软件部署和使用,涉…