我想知道是否
try / catch可以捕获子线程抛出的异常。
如果没有,处理子线程中引发的异常的最佳做法是什么。
答案 0 :(得分:5)
您可以收听Application.ThreadException
和AppDomain.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`
}
处理异常“所属”的子线程中的异常。