阻止visual studio在任务中打破异常

时间:2013-06-04 15:39:53

标签: c# visual-studio-2010 debugging visual-studio-debugging

我有以下代码:

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

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

当任务中抛出一个异常时,我希望它在try catch中被冒泡,而不是在导致异常的时候打破visual studio。

我尝试了谷歌,有些人建议我在我的方法上添加此[DebuggerHidden],但它不起作用

3 个答案:

答案 0 :(得分:25)

好的,我发现了怎么做。答案是正确的here在备注部分

  

当启用“Just My Code”时,Visual Studio在某些情况下会在抛出异常的行上中断,并显示一条错误消息,指出“异常未由用户代码处理”。这个错误是良性的。您可以按F5继续并查看这些示例中演示的异常处理行为。 要阻止Visual Studio在第一个错误中出现问题,只需取消选中“工具”,“选项”,“调试”,“常规”下的“启用我的代码”复选框。

答案 1 :(得分:6)

从VS的角度来看,从委托传递到任务的异常与任何其他异常之间确实没有任何不同。

在一般情况下无法解决这个问题。

然而,你可以做的一件事是利用这样一个事实:当重新抛出异常时,它被包裹在AggregateException中。当抛出AggregateException而不是其他例外时,你可能会中断。

你可以去调试 - >例外,取消选择所有CLR异常,但随后重新启用聚合异常:

enter image description here

它现在不会在Task正文中暂停,但会在您拨打Wait时暂停调试器。

不幸的副作用是,您现在不再停留在程序中任何其他位置的任何其他异常,即使它们不在传递给Task的委托中。

答案 2 :(得分:0)

要关闭例外停止,请按“Ctrl + Alt + E”。这将打开“例外”窗口。解开“公共语言运行时异常 - 抛出”。