2010-09-10 230 views
7

我正在使用異常驗證Silverlight 4中的控件輸入。當我拋出無效輸入異常時,VS 2010將顯示彈出窗口並停止程序。我忽略了這一點並恢復了程序,並且一切正常(因爲異常用於表示驗證錯誤。)有沒有辦法將該異常標記爲忽略?使Visual Studio忽略異常?

我跟隨此tutorial

+5

的幾乎如出一轍:http://stackoverflow.com/questions/2689065/supress-output-from-visual-studio-output-pane-c/2689187#2689187 (我的答案在這裏同樣適用)。我建議不要使用異常來驗證用戶輸入 - 如果有的話,正確的輸入是異常並且違反規則,而不是相反。 – 2010-09-10 21:53:06

+0

我知道。但是這似乎是Silverlight實現它的方式。 (或者看起來,我是SL的新手。) – 2010-09-10 22:11:53

+0

你可以考慮'Try *'方法,比如'int.TryParse(「123」,ref result)'返回一個'bool'指示操作是否成功。 – zneak 2010-10-03 17:12:09

回答

16

調試 - >例外 - >取消選中

+2

是的,但你應該能夠直接從彈出框中禁用它。 – 2014-01-24 11:05:12

4

菜單,調試程序,例外...

在該對話框中,可以去掉勾選「拋出」列一個例外,對整個命名空間。你可以添加你自己的。 etc.etc。

+0

這是有用的信息,並允許我們創建一個自定義異常來重置使用非託管dll FPU寄存器,並能夠正常調試。非常便利! – ouflak 2015-01-07 13:32:47

1

您可以通過塊

#if !DEBUG 
     throw new Exception(); 
/// this code will be excepted in the debug mode but will be run in the release 
#endif 
+3

這不會阻止拋出異常嗎?我希望它被拋出,我只是不希望VS停止應用程序並彈出該框。 – 2010-09-10 22:11:24

1

把這個拋出異常好像它應該工作的性質上面周邊禁用某些拋出塊,但顯然不會: [System.Diagnostics.DebuggerHidden()]

private String name; 

    [System.Diagnostics.DebuggerHidden()] 
    public String Name 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      if (String.IsNullOrWhiteSpace(value)) 
      { 
       throw new ArgumentException("Please enter a name."); 
      } 
     } 
    } 
2

我得到[System.Diagnostics.DebuggerHidden()]工作,如果我也選擇

調試>選項>調試>常規>啓用我的代碼(僅限管理)。

我很多地訪問Excel對象模型,我非常喜歡能夠運行調試器並捕獲所有異常,因爲我的代碼通常不是特例。但是,Excel API會引發很多異常。

// [System.Diagnostics.DebuggerNonUserCode()] works too 
[System.Diagnostics.DebuggerHidden()] 
private static Excel.Range TrySpecialCells(Excel.Worksheet sheet, Excel.XlCellType cellType) 
{ 
    try 
    { 
     return sheet.Cells.SpecialCells(cellType); 
    } 
    catch (TargetInvocationException) 
    { 
     return null; 
    } 
    catch (COMException) 
    { 
     return null; 
    } 
} 
3

我試圖使一個通用的解決方案,我可以,我想調試器不停止,如果我得到一個異常任何呼叫放身邊,但我沒有得到它的工作。

任何想法表示讚賞。但顯而易見的解決方案將是VS2010調試器支持一個標誌DoNotBreakIfException :-)

我的想法是能夠通過

srng = ExcelTry(() => sheet.Cells.SpecialCells(cellType)); 

來代替像

srng = TrySpecialCells(sheet, cellType); 

代碼,其中ExcelTry是

[System.Diagnostics.DebuggerNonUserCode()] 
[System.Diagnostics.DebuggerHidden()] 
private static T ExcelTry<T>(Func<T> call) 
{ 
    try 
    { 
     return call(); 
    } 
    catch (TargetInvocationException) 
    { 
     return default(T); 
    } 
    catch (COMException) 
    { 
     return default(T); 
    } 
} 
+0

這個項目應該在我的項目下面閱讀,這是工作。 – Mattias 2011-05-07 08:50:47

+0

使用「private static T ExcelTry (Expression > call)」和「return call.Compile()();」 – Sven 2012-04-03 13:19:26

0

從Visual Studio 2015開始,有一個例外設置窗口這個。

調試>窗口>例外設置