19

我有以下代码:

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]在我的方法之上添加这个,但它不起作用。

4

3 回答 3

30

好的,我发现了如何做到这一点。答案就注释部分

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

于 2013-06-04T18:47:46.667 回答
8

从 VS 的角度来看,从任何其他异常传递给 Task 的委托中抛出的异常实际上没有任何区别。

在一般情况下没有办法解决这个问题。

但是,您可以做的一件事是利用这样一个事实,即当重新抛出异常时,它被包裹在一个AggregateException. 当 anAggregateException被抛出但不是其他异常时,您可能会中断。

您可以转到 Debug -> Exceptions,取消选择所有 CLR 异常,然后重新启用聚合异常:

在此处输入图像描述

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

不幸的副作用是,您现在将不再为程序中其他任何地方的任何其他异常暂停,即使它们不在传递给Task.

于 2013-06-04T15:51:14.880 回答
0

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

于 2013-06-04T15:46:22.270 回答