多线程环境中的异常处理

时间:2010-11-16 07:14:10

标签: c# .net

我想知道是否

try / catch可以捕获子线程抛出的异常。

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

3 个答案:

答案 0 :(得分:5)

您可以收听Application.ThreadExceptionAppDomain.UnhandledException事件,以捕获线程中未捕获的异常。但最好的方法是捕获并处理线程本身的异常。这应该是正常关闭/记录的最后手段。

答案 1 :(得分:2)

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

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

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

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

请参阅http://msdn.microsoft.com/en-us/library/ms228965(v=VS.90).aspx以供参考。

答案 2 :(得分: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`
}

处理异常“所属”的子线程中的异常。