2010-11-16 105 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` 
} 

處理其中的例外「屬於」子線程例外。