2013-06-04 84 views
11

我有以下代碼:停止從任務打破例外視覺工作室

Task load = Task.Factory.StartNew(() => {//Some Stuff Which Throws an Exception}); 

try 
{ 
    load.Wait(); 
} 
catch (AggregateException ex) 
{ 
    MessageBox.Show("Error!"); 
} 

當過一個例外是在任務拋出,我也想泡了卡在嘗試捕捉,而不是視覺在發生異常的時候,工作室突破。

我試了谷歌和一些建議我對我的方法的頂部添加此[DebuggerHidden],但它不工作

+0

哦,男人,這讓我很困惑。我認爲我的例外根本沒有被發現,但是自動破解還爲時過早,可以繼續。真的好像是一個非常糟糕的默認行爲。錯誤信息似乎是公然錯誤的,因爲它聲稱這個異常未被捕獲,但是持續的異常會導致它被完全捕獲。 – Kat

回答

22

好吧,我發現如何做到這一點。答案是在說明部分中,右鍵here

啓用「僅我的代碼」時,Visual Studio在某些情況下會打破拋出異常的行並顯示,上面寫着「異常不被處理的錯誤信息用戶代碼「。這個錯誤是良性的。您可以按F5繼續並查看這些示例中演示的異常處理行爲。 爲防止Visual Studio突破第一個錯誤,只需取消選中工具,選項,調試,常規下的啓用只是我的代碼複選框。

0

要關閉停止對異常按「Ctrl + Alt + E」。這將打開例外窗口。解開「公共語言運行時異常 - 投擲」。

+1

這會阻止它在委託中暫停,但不會在「等待」時重新生成。 – Servy

6

從VS的角度來看,從委託傳遞中拋出的異常與任何其他異常中的任務之間確實沒有任何區別。

在一般情況下沒有辦法解決這個問題。

但是,你可以做的一件事就是利用這樣一個事實,即當異常被重新拋出時,它被包裝在一個AggregateException中。拋出AggregateException時可能會中斷,但不會出現其他異常。

你可以去調試 - >例外,取消選擇所有CLR異常,但隨後重新啓用骨料例外:

enter image description here

它現在不會在Task身體暫停,但將暫停調試器時您致電Wait

不幸的副作用是您現在不再在程序中的其他任何地方暫停其他任何異常,即使它們不在委託中傳遞給Task

+0

哦,那很不幸,但生病了吧。感謝您的回答! – Krimson