如果抛出异常但随后被捕获,则会发生这种情况。框架的一些部分以令人沮丧的频率执行此操作...但通常可以忽略它。如果它发生得非常频繁,并且您认为它可能会影响性能,您可以尝试找出是什么原因并查看是否有任何方法可以阻止它-但根据我的经验,通常是在完全正常的情况下发生的 :(要查看它发生的位置,请转到调试器选项并使其在异常被抛出时立即停止-这样,您应该可以获得一个堆栈跟踪,其中至少会显示是否有任何直接调用框架代码的代码。当然,如果DLL是您控制的DLL,则情况就不同了......那么您就更有机会弄清楚发生了什么 :)
在Windows上,异常会被抛出两次。第一次是通知调试器的机会。第二次是通知异常处理程序(比如你放在catch语句里的处理程序)的机会。所以,就像Jon Skeet所说的那样,如果异常没有到达第二次机会,那么这意味着它被调试器或其他组件捕获了。为了理解这是如何发生的,建议您阅读更多关于结构化异常处理和向量异常处理的文章。请参阅以下文章: SEH 向量异常处理 希望能对您有所帮助。