C# 防止Visual Studio调试在明显的“错误”上中断;“未处理的异常”; 请考虑这个简短的控制台应用程序代码。 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(); } }

C# 防止Visual Studio调试在明显的“错误”上中断;“未处理的异常”; 请考虑这个简短的控制台应用程序代码。 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(); } },c#,multithreading,exception-handling,visual-studio-2012,visual-studio-debugging,C#,Multithreading,Exception Handling,Visual Studio 2012,Visual Studio Debugging,运行时,Visual Studio将在抛出时中断,抱怨其未处理。当在调试器之外执行时,代码会执行我期望的操作(显示“Oops”) 我如何说服Visual Studio允许代码像在现实世界中一样执行?您可以将应用于方法以对调试器隐藏它。如果lambda是一种方法,您可以应用以实现所需的效果。@dtb:这很值得放在答案中,但是我希望看到一种替代方法,允许我保留lambda。只是观察:Visual Studio在调用ar.AsyncWaitHandle.WaitOne()时抱怨,而不是在try中调用a

运行时,Visual Studio将在
抛出时中断
,抱怨其未处理。当在调试器之外执行时,代码会执行我期望的操作(显示“Oops”)


我如何说服Visual Studio允许代码像在现实世界中一样执行?

您可以将应用于方法以对调试器隐藏它。

如果lambda是一种方法,您可以应用以实现所需的效果。@dtb:这很值得放在答案中,但是我希望看到一种替代方法,允许我保留lambda。只是观察:Visual Studio在调用
ar.AsyncWaitHandle.WaitOne()
时抱怨,而不是在try中调用
a.EndInvoke(ar)
时抱怨。@alpha mouse:这不是我在使用这个确切的代码时遇到的情况。VisualStudio正在停止运行
抛出
行。我没有,也从来没有见过它这样做,并且已经运行了很多次。唯一的解释是调试程序在第一次发出异常通知时停止。您在输出窗口中实际看到了什么?如何将这样的属性放置在匿名委托上?