我们所有人都使用 try catch 块。但是在自定义函数中处理错误的最佳方法是什么?
抛出异常时向用户显示一个消息框(如果可能在函数内),或者返回一个值指示在函数内发现错误?
这实际上取决于功能,但总的来说,我建议不要让它向用户显示 MessageBox;这是 UI 的任务。如果函数(出于任何正当理由)确实显示了 MessageBox,请提供保证“静默”的重载,以便函数的调用者可以阻止 MessageBox。但是,正如我所说,我认为最好让调用者决定如何处理异常。毕竟,该函数可能是从没有 UI 的 Windows 服务调用的。
我通常使用以下方法之一:
这适用于函数本身无法处理异常的情况。在某些情况下,该函数可能会处理异常状态并仍然执行其工作。在这些情况下,函数当然不会抛出异常。
我让我所有的错误冒泡到顶层,在那里我使用应用程序错误处理程序来处理它们。
如果我知道某个特定错误可能发生在 aa 函数中并且该函数可以处理它,那么我会这样做。
超时、未设置的对象引用等会上升到顶级处理程序。
不要捕获您无法处理的异常。到处都是 try/catch 块的代码很难阅读,这意味着您的异常处理代码没有包含在一个地方以便于维护。
如果您只是记录异常或提醒用户,这应该在堆栈顶部(或在您的应用程序层边界)完成。使用 Application.ThreadException 事件和 AppDomain.CurrentDomain.UnhandledException 事件并将它们连接到您的 Sub Main 方法中的事件处理程序。