异常处理适用于多个方法形式,在单个线程中运行



我正在编写一个面向表单的应用程序,它有很多小节和动作。通常,每个控件都与涉及应用程序的其他对象的操作(函数)相关联,这些对象通常应在调用点初始化。

然而,一些 scnarios 可能会导致一个或多个这些对象被null的状态,因此使用它们会导致异常。

问题是,它填充了,就像有更好的方法来处理这个问题,其他方法是用try/catch块包装表单的每个方法。

在异常最高

级别捕获异常不是一个好的做法,其中提供的类型和来源信息是最古老或不具体的。您必须在异常发生时捕获异常,尤其是尽可能具体的反应。这意味着:尝试单独筛选每个可能的异常。

但是在(原始)异常处理成为焦点之前(例如nullArgumentException或InvalidIndexExcetion),最好通过检查代码中可能的问题来防止它们或/并编写单元测试以查找更多可能的问题。使用状态未知的对象时,请检查 null。如果类型未知,请在使用前检查类型。使用索引之前检查索引是否在边界内...希望这有帮助。

您可以使用 Application.ThreadException 事件捕获所有未处理的异常

这听起来有点混乱。可以通过将事件处理程序添加到program.cs文件中AppDomain.CurrentDomain.UnhandledException来捕获所有异常。这将节省您不必包装尝试捕捉所有内容。然而,这不是真正的解决方案。您应该仅在可以成功处理异常时才处理异常,并且您应该尽可能针对问题进行本地处理。

例如,如果您有一个允许您在一个操作中创建消息的 UI然后是一个按钮,通过电子邮件将其发送到另一个按钮中。

电子邮件按钮应检查是否有消息,或者仅在创建消息时才应启用。你不应该使用 try catch,因为它的存在,那应该是说找不到邮件服务器,这是您无法在代码中处理的特殊情况。

因此,虽然你可以放一个顶级异常处理程序并回应说"对不起,我不能那样做",但如果它发生了很多,它不会让你的代码变得更好,它应该是你看到的,一个异常......

最新更新