配置legacyUnhandledExceptionPolicy属性防止处理异常后程序崩溃退出(C#)

news2024/11/16 19:37:02

这是这篇文章后面遗留的问题:

winform中的全局异常信息_winform全局异常捕获_zxy2847225301的博客-CSDN博客

就是线程抛出异常后,被AppDomain.CurrentDomain.UnhandledException注册的事件捕获后,程序依旧崩溃退出。

解决方案:在app.config配置文件中的runtime节点中加上<legacyUnhandledExceptionPolicy enabled="1"/>

<runtime>
    <legacyUnhandledExceptionPolicy enabled="1"/>
    <!--<legacyCorruptedStateExceptionsPolicy enabled="true"/>-->
</runtime>

-------------------废话开始,可以跳过不看

趁着今天有空,就找找有没有对应的处理方案。

首先是翻看了现在所在公司的代码,使用的是winform程序,没找到对应的解决方案。再翻看上一家公司的代码,使用的是wpf,看到注册的是Application.Current.DispatcherUnhandledException,然后在该事件中设置e.Handled = true;如下图:

 

但是查阅资料后发现,这种是UI线程抛出的异常处理, 对于非UI线程抛出的异常,还是需要用AppDomain.CurrentDomain.UnhandledException来捕捉

依旧没找到解决的方案,上一家另外一个系统的代码就无法获取到了,但我看过,记得是在AppDomain.CurrentDomain.UnhandledException注册的事件中通过代码的方式Dump出文件,但程序依旧还是会崩溃。

最后只能是网上不停地根据关键词去搜索,可能搜索的关键词不对,搜索了一段时间依旧没找到对对应的解决方案。没办法,只能看看AppDomain.CurrentDomain.UnhandledException注册的事件中的方法参数,看到有一个参数e(类型为UnhandledExceptionEventArgs)中一个属性isTerminating,指示公共语言运行时是否即将终止,如下图:

 很可惜,这个属性只能是获取而不能设置。再反编译看看它的构造函数,如下图:

 再打个断点调试一下,发现还是不行。只能是根据关键词isTerminating去stack overflow去搜搜看有没有解决方案了。还真找到了关键词:legacyUnhandledExceptionPolicy

链接如下:

c# - What causes the UnhandledExceptionEventArgs.IsTerminating flag to be true or false? - Stack Overflow

再通过关键词legacyUnhandledExceptionPolicy去搜索就发现很多博文了。

-------------------废话结束,可以跳过不看

好了,废话到此结束,正式开始本文的内容

测试环境:

vistual  studio 2017

winform 

.net framework 4..7 

步骤如下:

1  新增winfform程序,名为WindowsFormsApp1,在默认建好的窗体Form1中拖入一个Button按钮,并编写代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ThreadPool.QueueUserWorkItem((a) => {
                throw new Exception("测试抛出异常");

            });
        }
    }
}

2  在Program程序中编写代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
           Application.Run(new Form1());
        }

       
        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
           
            MessageBox.Show("捕获到异常信息");
        }
    }
}

3  新增配置文件App.config,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <legacyUnhandledExceptionPolicy enabled="1"/>
    <!--<legacyCorruptedStateExceptionsPolicy enabled="true"/>-->
  </runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/></startup></configuration>

4  然后编译并生成,运行结果如下:

可以看到,程序发生异常后,并不会崩溃退出。

最后插一句,反编译工具dnspy的配置文件使用的是<legacyCorruptedStateExceptionsPolicy enabled="true" />

 

但我试了一下,并不好使,改变.net framework的版本都试过,不好使,可能是我操作的姿势不对吧。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

架构-嵌入式模块

章节架构 约三分&#xff0c;主要为选择题 #mermaid-svg-z6RGCDSEQT5AhE1p {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-z6RGCDSEQT5AhE1p .error-icon{fill:#552222;}#mermaid-svg-z6RGCDSEQT5AhE1p .error-text…

【产品经理】从用户体验五要素出发,谈如何设计与体验一款产品

用户体验五要素是产品人必备的知识技能&#xff0c;由于网络碎片化的了解&#xff0c;往往容易造成其高深莫测&#xff0c;晦涩难懂的形象&#xff0c;进而对其束之高阁。但实质不过是一种产品分析与设计的方法论&#xff0c;正确姿势去了解它能帮助我们更好地理解一款产品和从…

移动端小于12px的字体处理方法

今天在按设计稿坐页面时&#xff0c;遇到了下图的情况 ​​​​​ 由于浏览器对字体最小为12px的限制&#xff0c;所以我查阅资料后尝试使用transform:scale来处理 代码如下&#xff1a; <div class"icon"><span class"iconfont icon-a-xuexi3 icon-…

ZYNQ——PL端流水灯的实现

文章目录 一、介绍二、代码编写三、引脚分配四、仿真分析五、添加 ILA IP六、板上验证 一、介绍 本文介绍的是在ZYNQ 7020黑金开发板上实现PL端流水灯的例子&#xff0c;开发板上PL端的LED灯总共有4个&#xff0c;在原理图中找到 PL LED 如下图所示&#xff0c;通过看图可知&a…

【MarkDown】CSDN Markdown之四象限图quadrantChart详解

四象限图 四象限图是一种将数据分为四个象限的可视化方法。它用于在二维网格上绘制数据点&#xff0c;其中一个变量表示x轴&#xff0c;另一个变量表示y轴。根据针对正在分析的数据集的一组标准&#xff0c;将图表分成四个相等的部分来确定四个象限。经常使用四象限图来识别数…

父亲节|祝天下所有父亲节日快乐,长寿安康!

父亲节&#xff0c;是一个感谢父亲的节日。普遍认为的日期是每年6月的第三个星期日&#xff0c;在这一天世界上有52个国家和地区在过父亲节。同时注重孝道也是我们中华民族的传统文化。 在这个感恩的节日里 把最真诚美好的祝福 送给天下所有的父亲们 祝福他们 节日快乐&…

OpenAI 大模型生态

目录标题 1. 语言类大模型2. 图像多模态大模型3. 语音识别模型4. 文本向量化模型5. 审查模型6. 编程大模型1. 语言类大模型 包括GPT-3、GPT-3.5、GPT-4系列模型。并且,OpenAl在训练GPT-3的同时,训练了参数不同、复杂度各不相同的A、B、C、D四项大模型(基座模型),用于不同场景…

mysql 集群 MGR

mysql安装&#xff08;3台服务&#xff09; 1下载 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz 2解压mysql wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz tar -zxvf…

键盘按键事件 通过键盘上下左右按键移动界面上图标

#main.c文件 #include “keyevent.h” #include int main(int argc, char *argv[]) { QApplication a(argc, argv); KeyEvent w; w.show(); return a.exec();} #include “keyevent.h”//头文件 #ifndef KEYEVENT_H #define KEYEVENT_H #include #include #include cl…

Windows安装Make工具(make.exe和mingw)

1、make.exe 官网介绍&#xff1a;Make是一个工具&#xff0c;它控制从程序的源文件生成程序的可执行文件和其他非源文件。Make从一个名为Makefile的文件中获取如何构建程序的知识&#xff0c;该文件列出了每个非源文件以及如何从其他文件中计算它。当你编写一个程序时&#x…

[性能测试工具]——Loadrunner的使用及安装指南

目录 一、基本概念 1.1 什么是性能测试&#xff1f; 1.2 性能测试和功能测试的区别&#xff1f; 1.3 什么样的软件属于性能好&#xff0c;什么样的软件属于性能不好&#xff1f; 1.4 哪些因素会影响到软件性能&#xff1f; 二、为什么对软件进行性能测试&#xff1f; 三、性…

压测工具Jmeter学习

压测工具Jmeter Jmeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI …

Django基础入门④:数据表显示和Django模板详讲

Django基础入门④&#xff1a;数据表显示和Django模板详讲 数据表显示字段显示表单显示分块内联显示列表显示搜索栏目创建筛选排序分页导入导出 Django模板什么是模板模板使用render方法详解 &#x1f3d8;️&#x1f3d8;️个人简介&#xff1a;以山河作礼。 &#x1f396;️&…

CVPR | 时尚领域视觉语言预训练模型Kaleido-BERT

来源&#xff1a;投稿 作者&#xff1a;小灰灰 编辑&#xff1a;学姐 这是一篇在时尚领域、往细粒度方向做视觉-语言预训练的工作。 论文标题&#xff1a;Kaleido-BERT: Vision-Language Pre-training on Fashion Domain 论文链接&#xff1a;https://arxiv.org/abs/2103.1611…

深度刨析指针Advanced 2

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《系统解析C语言》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白…

使用omp并行技术加速最短路径算法-迪杰斯特拉(Dijkstra)算法(记录最短路径和距离)

原理&#xff1a; Dijkstra算法是解决**单源最短路径**问题的**贪心算法** 它先求出长度最短的一条路径&#xff0c;再参照该最短路径求出长度次短的一条路径 直到求出从源点到其他各个顶点的最短路径。 首先假定源点为u&#xff0c;顶点集合V被划分为两部分&#xff1a;集合…

stable-diffusion-webui的介绍与使用——Controlnet1.1

源码地址&#xff1a;https://github.com/lllyasviel/ControlNet | 最新版本 controlnet-v1.1 论文地址&#xff1a;2302.Adding Conditional Control to Text-to-Image Diffusion Models 扩展UI地址&#xff08;需先安装sd-webui&#xff09;&#xff1a;https://github.com/M…

基于对Element UI的表单验证

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1fa80;从以下源码中介绍&#xff1a;&#x1f380;这里是官网源码 &#x1f412;个人主页 &#x1f3c5;JavaEE系列专栏 &#x1f4d6;前言&#xff1a; 本篇博客主要以介绍基…

杂记——FDA获批的AI超声产品

目前&#xff0c;人工智能算法在医学图像领域发展迅猛。相对于CT、MRI等&#xff0c;人工智能在超声图像处理领域仍处于起步阶段。近年来&#xff0c;多项研究利用深度学习、计算机视觉和图像处理等技术&#xff0c;对超声图像进行自动化分析、识别和量化&#xff0c;提供辅助医…

Golang的pprof性能分析

文章目录 一、pprof 概述二、服务开启pprof1、代码中引用pprof2、服务开启一个端口&#xff0c;用来监听pprof 三、使用pprof采集CPU耗时1、调用流程图2、查看火焰图 四、使用pprof分析内存泄漏问题查看当前程序的内存占用查看goroutine的运行时间 五、性能优化案例背景1、压测…