2010-11-16 90 views
2

我想知道,如果例外,在多线程环境

的try/catch可以捕获通过孩子们的线程抛出的异常处理。

如果没有,处理子线程中抛出的异常的最佳做法是什么。

+0

您使用的是什么技术? WinForms,WPF,控制台,ASP.net? – 2010-11-16 07:27:08

回答

2

这取决于您定位的.NET框架。

在1.1及更低版本中,子线程抛出的异常只有在try/catch块之外运行时才会被转发到主线程。

在2.0及更高版本中,此行为已更改:线程将被终止,并且异常将不被允许继续进行。

无论如何,您可以像处理单线程应用程序一样处理线程内的异常。

查看http://msdn.microsoft.com/en-us/library/ms228965(v=VS.90).aspx仅供参考。

+1

子线程抛出的异常将会终止从.NET 2开始的整个程序。 – cdhowie 2010-11-16 07:22:40

+0

刚刚尝试过。 cdhowie是正确的。 – user496949 2010-11-16 07:24:09

+0

“转发给主线程”是什么意思?你能举一个例子说明这将如何工作以及这些例外情况如何被发现? – 2010-11-16 07:24:45

0

没有,考虑下面的代码:

try 
{ 
    var t = new Thread(()=> 
     { 
      Thread.Sleep(5000); 
      throw new Exception(); 
     }); 
    t.Start(); 
    //t.Join(); 
} 
catch 
{ 
    //you can't deal with exception here 
    //even though you uncomment `t.Join` 
} 

处理其中的例外“属于”子线程例外。