【发布时间】:2011-12-02 20:40:54
【问题描述】:
请考虑这个简短的控制台应用程序代码。
static void Main(string[] args)
{
try
{
Action a = () =>
{
throw new ApplicationException("Oops");
};
var ar = a.BeginInvoke(null, null);
ar.AsyncWaitHandle.WaitOne();
try
{
a.EndInvoke(ar);
Console.WriteLine("No message");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
finally
{
Console.ReadKey();
}
}
当运行 Visual Studio 时,throw 会中断并抱怨它未处理。在调试器之外执行时,代码会按照我的预期执行(显示“糟糕”)。
如何说服 Visual Studio 允许代码像在现实世界中一样执行?
【问题讨论】:
-
如果 lambda 是一种方法,您可以应用 DebuggerNonUserCode attribute 来达到预期的效果。
-
@dtb:这很值得放在答案中,但我希望看到一个允许我保留 lambda 的替代方案。
-
只是观察:Visual Studio 在调用
ar.AsyncWaitHandle.WaitOne()时会抱怨,而不是在尝试中的a.EndInvoke(ar)时抱怨。 -
@alpha-mouse:这不是我使用这个确切代码所遇到的情况。 Visual Studio 在
throw行停止。 -
我没有,也从未见过它这样做,并且已经练习了很多次。调试器在第一次机会异常通知时停止是唯一的解释。您在“输出”窗口中实际看到了什么?
标签: c# multithreading exception-handling visual-studio-2012 visual-studio-debugging