posts - 67, comments - 121, trackbacks - 1, articles - 0

2006年1月1日

以前写过一篇关于这个主题的文章( http://interma.cnblogs.com/archive/2005/10/20/258781.html ),今天回过头去看看,发现写错了。ft死了,赶紧作此修正版,新年新气象嘛。

工作线程中抛出未捕捉的异常会如何?猜想可能会是如下2种情况之一:
[1] 整个进程(程序)全死掉。
[2] 那个抛异常的线程无声无息的死掉,而不对其他线程造成影响。

正确的解答是:[2]

在Jason Clark的一篇介绍托管应用中的Exception文章中(MSDN开发精选2004年10月刊),概述了在应用程序中执行的未处理的异常处理程序的默认行为:
[1] 主线程上发生的未处理异常将导致该应用程序终止。
[2] 主线程以外的线程(包括手动线程,线程池线程和CLR的终结器线程)上发生的未处理异常将会被CLR吸收。即发生异常时,你的应用程序没有任何表面迹象,仍会继续运行。

那么我们怎么来处理这种未捕捉线程呢?不管3721用catch (Exception) {}把它们全catch了?这不是一个好的方法。这里引入一个最佳实践就是通过为以下事件注册处理函数,将这些未处理Exception的详细信息保存到日志中,以供了解这些未处理Exception的详细信息,为以后代码中catch这种特化的Exception提供了非常有用的参考信息。
这些事件是:
[1] Application.ThreadException(Windows窗体未处理异常)或Application_Error函数(ASP.Net页面未处理异常,Global.asax中)
[2] AppDomain.UnhandledException(CLR未处理异常)

最后祝大家2006新年快乐,心想事成,

posted @ 2006-01-01 11:22 InterMa 阅读(1370) 评论(2) 编辑

    
2005年就这样过去了,回首2005,我内心非常的矛盾与疲倦,整个一年心情都很糟糕,就像那个已经被折磨得奄奄一息的Lich King,没有了生机与活力。2004年的豪情与自信也荡然无存,但愿在新的一年里我能够重新鼓起勇气,找回快乐与自信。

祝InterMa和zhuor在2006年学业有成,天天开心,心想事成。
 
             
                                           
   

posted @ 2006-01-01 02:02 InterMa 阅读(132) 评论(1) 编辑