首页新闻找找看学习计划

一个处理子线程中异常的问题

0
悬赏园豆:30 [已解决问题] 解决于 2015-03-31 17:28

高人勿入


MSDN上面说,framework2.0以后,如果子线程中发生了未处理异常,通常情况下应用程序会崩溃,但有三种例外情况,它们是:

  • A ThreadAbortException is thrown in a thread because Abort was called.
  • An AppDomainUnloadedException is thrown in a thread because the application domain in which the thread is executing is being unloaded.
  • The common language runtime or a host process terminates the thread by throwing an internal exception.

原文链接

前两种情况还好理解,最后一种情况是怎么回事,哪位园友可以举例说明,谢谢。interal exception是什么意思,是不是指CLR本身或操作系统产生的进程出现的异常,而不是托管代码执行时出现的异常?

会长的主页 会长 | 大侠五级 | 园豆:7167
提问于:2015-03-29 21:31
< >
分享
最佳答案
0

The common language runtime or a host process terminates the thread by throwing an internal exception.

你把它翻译成中文再读读。

收获园豆:30
Launcher | 高人七级 |园豆:45040 | 2015-03-30 09:23

这句话确实没错,翻译成中文就懂了

代码小兵的成长 | 园豆:301 (菜鸟二级) | 2015-03-30 10:19

@代码小兵的成长: 什么样的异常算是“interal exception”呀,谢谢。

会长 | 园豆:7167 (大侠五级) | 2015-03-30 16:57

@代码小兵的成长: MSDN上的翻译是"公共语言运行时或宿主进程通过引发内部异常来终止线程",我不太确定什么样的异常才算是“内部异常”。

会长 | 园豆:7167 (大侠五级) | 2015-03-30 17:00

@代码小兵的成长: 我这个理解方式对吗:“CLR本身或操作系统产生的进程出现的异常,而不是托管代码执行时出现的异常”

会长 | 园豆:7167 (大侠五级) | 2015-03-30 17:09

@会长: 额,哥啊,你自己写代码会不会出现异常啊,微软内部的方法也是方法啊,就不能出异常啊,比如内存泄露等,所以你不用纠结别人的异常时什么异常,总之,就是内部出错了,自然就异常了,就比如你的电脑系统出问题了,你重启不就得了,你如果非要理解什么原因,那就得自己多学习了。而且你说:“CLR本身或操作系统产生的进程出现的异常,而不是托管代码执行时出现的异常”,这句话看着意思是这样的,但是深究的话,你先得搞懂微软的代码是不是也是以托管代码的方法运行的,如果是的话,那你“而不是托管代码执行时出现的异常”这句话就是错误的

代码小兵的成长 | 园豆:301 (菜鸟二级) | 2015-03-31 15:07

@代码小兵的成长: 应该差不多,我就是怕万一理解错误就不好了,所以来这里确实确认,刚开始我以为“ internal exception”可能是特指某种异常,比如“inner exception”那样,指的是如果A异常引发B异常,A异常就是B异常的inner exception。

会长 | 园豆:7167 (大侠五级) | 2015-03-31 17:28

噢噢噢噢,A的异常引发了B的异常,不会吧,反正我不知道,反正估计不会

代码小兵的成长 | 园豆:301 (菜鸟二级) | 2015-03-31 18:23

@代码小兵的成长: 谢谢了

会长 | 园豆:7167 (大侠五级) | 2015-03-31 18:38

@会长: 创建一个 Winform 程序,在主线程中再创建一个子线程,子线程中就干一件事情,抛出一个异常,编译成 Release,然后运行,你会看到系统会提示你是继续还是结束进程,如果继续的话,你会发现程序还是可以接着用。这就是对第三种情况的模拟。

Launcher | 园豆:45040 (高人七级) | 2015-04-01 09:26

@Launcher: 谢谢。我去试试

会长 | 园豆:7167 (大侠五级) | 2015-04-01 21:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册