.Net主线程扑捉子线程中的异常
首先看一段C#代码:运行后发现主线程通过try{}catch{}是不能扑捉子线程中的抛出来的异常。
{
static void Main(string[] args)
{
try
{
System.Threading.Thread thread = new System.Threading.Thread(new Program().run);
thread.Start();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Thread.Sleep(1000);
}
public void run()
{
throw new Exception();
}
}
为什么呢?
首先需要了解异常的实现机制:异常的实现机制是严重依赖与线程的栈的。每个线程都有一个栈,线程启动后会在栈上安装一些异常处理帧,并形成一个链表的结构,在异常发生时通过该链表可以进行栈回滚,如果你自己没有安装的话,可能会直接跳到链表尾部,那可能是CRT提供的一个默认处理帧,弹出一个对话框提示某某地址内存错误等,然后确认调试,取消关闭。
所以说,线程之间是不可能发生异常处理的交换关系的。
但是在实际的程序设计中,会牵涉到扑捉子线程的异常,那么该怎样解决这个问题呢?
{
private delegate void ExceptionHandler(Exception ex);
private static ExceptionHandler exception;
private static void ProcessException(Exception ex)
{
Console.WriteLine(ex.Message);
}
static void Main(string[] args)
{
exception = new ExceptionHandler(ProcessException);
System.Threading.Thread thread = new System.Threading.Thread(new Program().run);
thread.Start();
Thread.Sleep(1000);
}
public void run()
{
try
{
throw new Exception();
}
catch (Exception ex)
{
if (exception != null)
{
exception(ex);
}
}
}
}
上面使用委托的方式,间接的解决了:把子线程中的异常信息交个主线程的一个方法去执行。(通过委托方式)
Best Reagrds,
Charles Chen
转载于:https://www.cnblogs.com/wwwzzg168/p/3570083.html
.Net主线程扑捉子线程中的异常相关推荐
- java主线程捕获子线程中的异常
java主线程捕获子线程中的异常 参考文章: (1)java主线程捕获子线程中的异常 (2)https://www.cnblogs.com/jpfss/p/10272726.html (3)https ...
- Java中主线程如何捕获子线程抛出的异常
Java中主线程如何捕获子线程抛出的异常 参考文章: (1)Java中主线程如何捕获子线程抛出的异常 (2)https://www.cnblogs.com/jpfss/p/10272885.html ...
- [转]Java中主线程如何捕获子线程抛出的异常
这么来看待这个问题.首先明确线程代码的边界.其实很简单,Runnable接口的run方法所界定的边界就可以看作是线程代码的边界.Runnable接口中run方法原型如下: << ...
- [Java][Android] 多线程同步-主线程等待全部子线程完毕案例
有时候我们会遇到这种问题:做一个大的事情能够被分解为做一系列相似的小的事情,而小的事情无非就是參数上有可能不同样而已! 此时,假设不使用线程,我们势必会浪费许多的时间来完毕整个大的事情.而使用线程的话 ...
- DLL内线程同步主线程研究(子线程代码放到主线程执行)
DLL内线程同步主线程研究(子线程代码放到主线程执行) 我们在实际项目中经常会用到多线程编程,比如Socket编程等,在创建的线程内同步主线程一般使用Synchronize方法实现子线程操作放到主线程 ...
- java main 如何不退出_为什么java main主线程退出了子线程还能运行;golang main结束所有协程都被结束了...
最近看golang main函数结束,所有协程都被结束了 结论是这样:A不是main程的情况下,在A程里开启B程,A程执行完,A程return之后,B程不受影响,不会挂掉.所有子协程与main程同级的 ...
- Java多线程之----主线程会等待子线程结束再结束么,怎么让主线程等待子线程结束呐?
首先给出结论: 主线程和子线程之间没有谁先谁后结束这种关联,它们只是各自负责自己的线程任务,如果该线程的任务结束了,该线程自然会结束运行. talk is cheap,show me the code ...
- 主线程和子线程的关系(讨论主线程结束,子线程是否要回收)
主线程和子线程,在操作系统里面其实是一样的,没有本质区别.至于主线程结束,子线程是否要回收,下面有两种比较特殊的情况. 第一种: 主线程退出了,子线程还可以执行. 主要是因为pthread_exit函 ...
- 【Java 多线程】Java中主线程如何捕获子线程抛出的异常
首先明确线程代码的边界.其实很简单,Runnable接口的run方法所界定的边界就可以看作是线程代码的边界.Runnable接口中run方法原型如下: public void run(); 而所有的具 ...
最新文章
- jackson.ObjectMapper里enableDefaultTyping方法过期
- web前端开发论文写作_外语论文文献引言格式—MLA Style
- FAST算法学习笔记
- 英特尔将开源进行到底!
- [RocketMQ]消息中间件—RocketMQ消息消费(一)
- 两个Listbox的关联(省名 和 该省城市的对应)
- 优惠码:直通BAT面试算法精品课-牛客网
- 浅谈NLP中的领域自适应(Domain Adaptation) 技术
- python爬网易评论
- 计算机培训学校可行性报告,在线考试系统可行性分析报告
- java8时间转换函数学习,教你脱离jdf转换的痛苦
- 模拟电路-模拟加法器的设计和仿真
- oracle按照姓名查询,Oracle 10g如何对用户姓名,按首字母排序、查询
- 又有12款APP违规收集用户信息,下架整改
- 求字符串中回文子串的个数(回文树详解)
- 苹果手机视频去水印软件
- 18 打印日期 华科复试
- 系统开发和安全性分析
- 2022年全球市场电动汽车蓄电池总体规模、主要生产商、主要地区、产品和应用细分研究报告
- python写一个网络测速脚本_利用Python实现网络测试的脚本分享