当前位置: 首页 > news >正文

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);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用Qdrant+FastText实现向量存储和检索
  • YOLO基础-目标检测的性能指标详解与计算方法
  • vulnhub系列:devguru
  • [SWPUCTF 2021 新生赛]PseudoProtocols(构造伪协议)
  • C# 计算两两坐标之间的距离(SIMD加速)
  • 常用的数据结构有哪些?
  • Docker 部署RocketMQ
  • 若依框架将Mybatis改成MybatisPlus
  • RabbitMQ面试题汇总
  • 【数学建模】介绍论文书写格式
  • YOLOv10实时端到端目标检测
  • 智慧楼宇公厕系统小程序,提高卫生间管理使用效率
  • CDP问卷填报流程-百胜企业管理咨询
  • 8.9 python管理mysql
  • Go语言 Defer(延迟)
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • css系列之关于字体的事
  • ES6系列(二)变量的解构赋值
  • Fabric架构演变之路
  • Java 内存分配及垃圾回收机制初探
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • javascript从右向左截取指定位数字符的3种方法
  • maya建模与骨骼动画快速实现人工鱼
  • Objective-C 中关联引用的概念
  • Terraform入门 - 1. 安装Terraform
  • Webpack 4 学习01(基础配置)
  • 开发基于以太坊智能合约的DApp
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 通过git安装npm私有模块
  • 移动端唤起键盘时取消position:fixed定位
  • 7行Python代码的人脸识别
  • Semaphore
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ###C语言程序设计-----C语言学习(3)#
  • #07【面试问题整理】嵌入式软件工程师
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • #预处理和函数的对比以及条件编译
  • $.ajax,axios,fetch三种ajax请求的区别
  • $.proxy和$.extend
  • (1)虚拟机的安装与使用,linux系统安装
  • (CPU/GPU)粒子继承贴图颜色发射
  • (C语言)二分查找 超详细
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (ZT)薛涌:谈贫说富
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)ssm高校实验室 毕业设计 800008