我有一个 Windows 窗体应用程序。它使用 Assembly.LoadFile 加载扩展名为 .Plugin.dll 的程序集。这些“插件”之一调用另一个程序集 dll。该 dll 最终抛出 ValidationException 异常。抛出异常的方法在继承自 IDataErrorInfo 的类中。此类是包含在 Linq to SQL 类 (.dbml) 中的类。在“插件”中,我调用 DataContext.SubmitChanges。这被包裹在一个 try/catch block 中。这导致我的业务逻辑在提交到 OnValidate 覆盖中的数据库之前验证数据。我看到的结果是,在抛出 ValidationExeption 之后,调试器在 OnValidate 方法的底部停止,表明发生了未处理的异常。如果我继续运行该应用程序,我的 catch block 就会被执行。这正是我最初想要的,但为什么当它真正被处理时我会得到一个未处理的异常?
最佳答案
我 99% 确定导致此问题的“真实”异常确实未处理 - 这是调试器首先告诉您的,他通常是正确的。
当您之后继续在 VS 中运行该应用程序时,实际上并不会在您从调试器中执行您的 exe 时发生什么。事实上,调试器首先会通知您未处理的异常,然后继续执行一些挂起的逻辑(如果有的话)(这就是您看到 ValidationException 错误的原因)。但是未处理的异常仍然存在。我不完全了解这种行为的细节和原因,但我多次注意到这一点。
您必须在识别未处理的异常抛出的准确位置捕获准确的错误。 也许发布您的代码示例会有所帮助。
关于c# - Windows 窗体应用程序中未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9100791/