我所处的位置我有一个大型用户应用程序,它有很多表单,我正在寻找一种方法来关闭单个表单,如果由于某个逻辑已经在该表单上捕获而发生了异常。
现在我正在遵循“不要在任何地方写try / catch来捕捉愚蠢的错误”的原则,它确实使我的代码更清晰,但是当我有NullPointerException时会导致整个应用程序崩溃。
最好的解决方案是一个'本地错误处理程序',每个表单都会收集该级别的任何异常,并在那里终止该表单而不是冒泡并终止整个应用程序。
有人有什么想法吗?
答案 0 :(得分:5)
但是当我有NullPointerException时,会导致整个应用程序崩溃。
然后你需要修复NullReferenceException(s)
,而不是提出一些在全局级别捕获异常的复杂机制,并回溯以找到导致异常的形式。你应该简单地(尝试)设计你的代码,以便不可能发生空引用,或者如果它们这样做,它可以以优雅的方式处理。
如果您有导致崩溃的方案,请修复它,不要忽略它。您如何保证关闭表单会使您的程序现在和将来保持一致状态? (提示:你不能)
答案 1 :(得分:3)
您可以从公共基类派生表单,以便它们可以共享相同的错误处理程序吗?我们有一个基本表单,记录异常,显示错误,然后关闭表单(在调试模式下是可选的)。每个用户事件(例如button_click)都包含在一个调用基本错误处理程序的try / catch中。
此外,如果您不知道,还有全局异常处理程序:
Application.ThreadException event