c# 捕获全部线程的异常 试验

1.概要 捕获全部线程的异常 试验,最终结果task的异常没有找到捕获方法

2.代码

2.1.试验1

2.1.1 试验结果

 2.2 代码

2.2.1主程序代码

using NLog;
using System;
using System.Threading;
using System.Windows.Forms;namespace 异常监控
{static class Program{/// <summary>/// 应用程序的主入口点。/// </summary>[STAThread]static void Main(){try{Logger Logger = LogManager.GetCurrentClassLogger();//设置应用程序处理异常方式:ThreadException处理Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);//处理UI线程异常Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);//处理非UI线程异常AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());}catch(Exception ex){ToolInfo.WriteRecord("SystemLog", "Main", ex.ToString());}}/// <summary>/// UI异常处理/// </summary>/// <param name="sender"></param>/// <param name="e"></param>static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e){ToolInfo.WriteRecord("SystemLog", "Main1", e.Exception.ToString());}/// <summary>/// 非UI异常处理/// </summary>/// <param name="sender"></param>/// <param name="e"></param>static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e){ToolInfo.WriteRecord("SystemLog", "Main2", e.ExceptionObject.ToString());}}
}

 2.2.2窗口代码

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.Threading.Tasks;
using System.Windows.Forms;namespace 异常监控
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){throw new Exception("dddd");}private void button2_Click(object sender, EventArgs e){Task task = new Task(() =>{throw new Exception("dddd");});task.Start();}private void button3_Click(object sender, EventArgs e){Thread thread = new Thread(() => {throw new Exception("dddd");});thread.Start();}}
}

2.2.3日志类 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 异常监控
{/// <summary>/// 通用方法工具类/// </summary>public static class ToolInfo{/// <summary>/// 文档记录/// </summary>/// <param name="path">文件路径</param>/// <param name="filename">文件名称</param>/// <param name="str">内容</param>public static void WriteRecord(string path, string filename, string str){DateTime nowTime = DateTime.Now;int nYear = nowTime.Year;int nMonth = nowTime.Month;int nDay = nowTime.Day;int nHour = nowTime.Hour;//创建记录文件名称string strDT = "";string strfilename = "";strDT = nowTime.Day.ToString() + nowTime.Hour.ToString();strfilename = string.Format(".\\{0}\\{1}-{2}.txt", path, filename, strDT);//删除文件名称for (int i = 1; i < nDay; i++){for (int j = 1; j <= 24; j++){string strLYDT = "";string strLYfilename = "";strLYDT = i.ToString() + j.ToString();strLYfilename = string.Format(".\\{0}\\{1}-{2}.txt", path, filename, strLYDT);//删除今天之前的文件if (File.Exists(strLYfilename)){File.Delete(strLYfilename);}}}//记录内容string strData = "";strData = nowTime.ToString();strData += ": ";strData += str;strData += "\r\n";FileStream fs = new FileStream(strfilename, FileMode.Append);StreamWriter sw = new StreamWriter(fs);sw.Write(strData);sw.Flush();sw.Close();fs.Close();}}
}

2.2 试验2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp1
{class Program{static void Main(string[] args){AppDomain currentDomain = AppDomain.CurrentDomain;currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);try{throw new Exception("1");}catch (Exception e){Console.WriteLine("Catch clause caught : {0} \n", e.Message);}Task t = new Task(() =>{throw new Exception("2");});t.Start();Console.ReadKey();}static void MyHandler(object sender, UnhandledExceptionEventArgs args){Exception e = (Exception)args.ExceptionObject;Console.WriteLine("MyHandler caught : " + e.Message);Console.WriteLine("Runtime terminating: {0}", args.IsTerminating);}}
}

2.3 试验3 监控主线程的异常

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace ConsoleApp2
{class Program{static void Main(string[] args){AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;// 创建一个新线程并抛出异常Thread thread = new Thread(DoSomething);thread.Start();// 主线程继续执行其他操作Console.WriteLine("主线程继续执行其他操作...");// 防止主线程退出Console.ReadLine();}static void DoSomething(){throw new Exception("线程抛出异常");}static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e){Exception ex = (Exception)e.ExceptionObject;Console.WriteLine("捕获到异常:" + ex.Message);}}
}

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

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

相关文章

CCNP课程实验-03-Route_Path_Control_CFG

目录 实验条件网络拓朴需求 基础配置需求实现1.A---F所有区用Loopback模拟&#xff0c;地址格式为&#xff1a;XX.XX.XX.XX/32&#xff0c;其中X为路由器编号。根据拓扑宣告进对应协议。A1和A2区为特例&#xff0c;A1&#xff1a;55.55.55.0/24&#xff0c;A2&#xff1a;55.55…

RDS创建数据库

目录 创建数据库 创建账号与授权 连接RDS数据库 创建数据库 在创建数据库的页面&#xff0c;你需要设置数据库的名称、字符集、排序规则等信息。 字符集&#xff1a;字符集&#xff08;Character set&#xff09;是多个字符的集合&#xff0c;字符集种类较多&#xff0c;每个…

typescript,eslint,prettier的引入

typescript 首先用npm安装typescript&#xff0c;cnpm i typescript 然后再tsc --init生成tsconfig.json配置文件&#xff0c;这个文件在package.json同级目录下 最后在tsconfig.json添加includes配置项&#xff0c;在该配置项中的目录下&#xff0c;所有的d.ts中的类型可以在…

惠普打印机---共享打印机安装 --连接

1. 远程连接 输入 winR ,再输入共享打印机的连接的IP 2.进入 连接 界面 3.右击打印机 &#xff0c;点击连接 &#xff0c;就可以添加打印机设备 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ba03aea8156642d58982fd2ce0934b45.png 方法二、 添加打印机 2.…

什么是边缘计算:最全指南

什么是边缘计算 边缘计算是一个流行语&#xff0c;如云、物联网和人工智能。简单地说&#xff0c;边缘计算带来了网络的去中心化。边缘计算是即将到来的技术增强和进步。“边缘”一词的字面含义是地球上以分布式方式提供服务的地理位置。 边缘计算是一种分布式计算系统&#…

网络安全法解读之思维导图

一、出台背景 二、法律基础 三、网络安全法架构 1、第一章 总则&#xff08;1-14条&#xff09; 2、第二章 网络安全支持与促进&#xff08;15-20条&#xff09; 3、 第三章 网络运行安全&#xff08;21-39条&#xff09; &#xff08;1&#xff09;第一节 一般规定 &#xf…

leaflet学习笔记-leaflet-ajax获取数据(五)

前言 地图开发中都会用一些GeoJSON数据进行渲染&#xff0c;这是用就会需要加载GeoJSON数据&#xff0c;这时就可以使用leaflet-ajax进行数据的获取 数据准备 本文通过阿里云的地图选择器&#xff08;DataV.GeoAtlas官网&#xff09;可以找到云南省的GeoJSON数据&#xff0c…

【C++杂货铺】C++11新特性——可变参数模板

文章目录 一、可变模板参数相关概念的引入二、获取参数包中参数的个数三、递归函数方式展开参数包四、逗号表达式展开参数包五、可变模板参数的实际应用——emplace相关接口5.1 回顾一下 push_back 的三种用法5.2 emplace_back 使用方法介绍5.3 听说 emplace_back 可以提高效率…

MAC电脑安装java开发工具

一、安装brew 1.1、官网地址 链接 1.2、更新地址 二、安装 java brew install openjdk11 三、安装gradle Gradle安装与配置教程 - 知乎 四、GIT 4.1、GIT安装 brew install git 4.2、rsa ssh-keygen -t rsa -C "jhestarbucks.com" 五、自动搭建一个springBoot…

字符串 (5)--- 后缀数组(倍增思想求解)

字符串下标从 1 开始。 字符串 s 的长度为 n。 " 后缀 i" 代指以第 i 个字符开头的后缀&#xff0c;存储时用 i 代表字符串 s 的后缀 s[i ... n]。 后缀数组&#xff08;Suffix Array&#xff09;主要关系到两个数组&#xff1a;sa 和 rk。 后缀数组sa&#xff0c;s…

python基础-01

文章目录 前言一、python中的注释二、变量的数据类型1.Number&#xff08;数字&#xff09;2.Boolean&#xff08;布尔类型&#xff09;—— True 和 False3.String&#xff08;字符串&#xff09;4.List&#xff08;列表&#xff09;5.Tuple&#xff08;元组&#xff09;6.Dic…

详解动态顺序表

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

前端:html+css+js实现CSDN首页

提前说一下&#xff0c;只实现了部分片段哈&#xff01;如下&#xff1a; 前端&#xff1a;htmlcssjs实现CSDN首页 1. 实现效果2. 需要了解的前端知识3. 固定定位的使用4. js 监听的使用4. 参考代码和运行结果 1. 实现效果 我的实现效果为&#xff1a; 原界面如下,网址为&…

LLM Agent零微调范式 ReAct Self Ask

前三章我们分别介绍了思维链的使用&#xff0c;原理和在小模型上的使用。这一章我们正式进入应用层面&#xff0c;聊聊如何把思维链和工具使用结合得到人工智能代理。 要回答我们为什么需要AI代理&#xff1f;代理可以解决哪些问题&#xff1f;可以有以下两个视角 首先是我们…

三层架构概述

三层架构就是把整个软件的代码分为三个层次&#xff0c;分层的目的是&#xff1a;规范代码&#xff0c;大型软件需要团队配合的时候问题就来了&#xff0c;由于每个程序员风格不一样&#xff0c;而开发软件大量的代码风格不统一就会造成后期调试和维护出现问题&#xff0c;然而…

Squid 代理服务器

13.1.1缓存代理概述 作为应用层的代理服务软件&#xff0c;Squid主要提供缓存加速、应用层过滤控制的功能。 1.代理的工作机制 当客户机通过代理来请求Web页面时&#xff0c;指定的代理服务器会先检查自己的缓存&#xff0c;如果缓存中已 经有客户机需要的页面&#xff0c;则直…

Udp实现一个小型shell

实现原理 首先我们要有个客户端和一个服务器&#xff0c;客户端向服务器传递命令。而服务器收到命令后创建一个管道&#xff0c;并fork一个子进程。随后子进程解析命令&#xff0c;再把标准输出换成管道文件&#xff0c;因为命令行命令是自动输出到显示器的&#xff0c;所以我…

英飞凌TC3xx之一起认识GTM系列(一)先来认识GTM架构

英飞凌TC3xx之一起认识GTM系列(一)先来认识GTM架构 1 先来认识GTM的通用架构2 概览2.1 架构的简要说明2.2 架构概述1 先来认识GTM的通用架构 GTM系统使用GTM全局时钟fGTM 运行(本文称为SYS_CLK)。 特点如下: GTM模块由两个主要部分组成: 由博世设计的GTM IP v3.1.5.1 …

【Java 数组解析:探索数组的奇妙世界】

数组的引入 我们先通过一段简单的代码引入数组的概念。 import java.util.Scanner; public class TestArray01{public static void main(String[] args){//功能&#xff1a;键盘录入十个学生的成绩&#xff0c;求和&#xff0c;求平均数&#xff1a;//定义一个求和的变量&…

【我与CSDN的128天】相识相知相守

目录: 相识相知相守 相识 为什么选择写博客? 写博客的目的,我觉得是因为想要记录。记录学习的过程,整理学过的知识,方便今后的复习。 更重要的是热爱分享,分享给别人知识也是一种快乐。 在某一瞬间教会某一个你不认识的人,难道不是一个很酷的事情吗? 为什么选择CSDN? 作…