|
|
1
6
我仍然不能完全确定我是否理解这个问题,但有几点要提:
我已经用类似于您的测试代码亲自测试了它,并验证了异常“handler”中的代码确实执行了。但应用程序仍然会崩溃,你无法阻止它。 更新: 我要再做一次尝试,就这样。 如果您的目标是让无人值守的应用程序始终运行,那么您正好有三个选项:
这是你的选择。我强烈建议你 处理后台线程上的异常,因为从后台线程转义的未处理异常是代码中需要修复的灾难性错误。 如果它来自外部组件,而您无法捕获它,那么灾难性的错误就在该组件中,您应该考虑将其报告给作者或使用其他组件。 如果应用程序不够稳定,无法继续运行,那么仅仅要求“这个应用程序必须始终运行,并且应该完全忽略致命的崩溃”,并不能使这种情况成为可能。撞车就是撞车。如果发动机突然熄火,你不能设计一辆汽车立即重新启动。你能做的最好的事情就是让一个可信的操作员,不管是人工操作员、操作系统还是一些监控软件,代表它重新启动应用程序。 这个问题的变体似乎经常出现——基本上,“我的应用程序不应该崩溃,或者如果它崩溃了,它应该是不可见的。我想吃掉每一个未处理的异常并假装它没有发生,“这不仅是不可能的,而且实际上违背了良好设计的每一个原则(特别是“快速失败”原则,这一原则当然可以重新解释,但决不应被完全忽略)。 我只能这么说。如果你不愿意接受,那么祝你找到一个可行的选择。 |
|
|
2
0
visual studio可能设置为在异常时中断,但如果继续单步执行代码,它仍应遵循所需的路径。你也应该尝试在VS之外运行应用程序。 在未处理的异常之后重新启动应用程序是个坏主意,因为(根据定义)您处于未知状态。如果异常条件从未改变,重新启动(如果可能的话)可能会使您陷入一个永无止境的重新启动循环。相反,请考虑尝试将异常信息记录到Web服务器,以便可以调查和修复崩溃。不过,在上载崩溃数据之前,请确保获得用户的权限。 |