我们有一个WPF应用程序,它的某些部分可能会在运行时抛出异常。我想全局捕获任何未处理的异常并记录它们,但如果没有发生任何事情,则继续执行程序(有点像VB的On Error Resume Next
)。
这在c#中可行吗?如果是这样,我究竟需要把异常处理代码放在哪里?
目前,我看不到任何一个可以包裹try
/catch
的点,并且它将捕获可能发生的所有异常。即使那样,我也会因为捕获而留下任何已经执行的东西。还是我想错了方向?
埃塔:因为下面很多人指出:应用程序不是为了控制核电站。如果它崩溃了,这不是什么大问题,但它会抛出随机异常,这些异常大多与ui相关,在使用它的上下文中是一个麻烦。有(可能仍然是)一些这样的,因为它使用插件架构,可能被其他人(也可以是学生)扩展;所以没有经验丰富的开发人员,能够编写完全无错误的代码)。
至于捕捉到的异常:我会将它们记录到日志文件中,包括完整的堆栈跟踪。这就是练习的意义所在。只是为了对抗那些把我的类比和VB的OERN类比的人。
我知道盲目忽略某些类型的错误是危险的,可能会破坏我的应用程序实例。如前所述,这个项目对任何人来说都不是关键任务。没有哪个头脑正常的人会把人类文明的存亡赌在这上面。它只是一个测试某些设计方法的小工具。软件工程。
对于应用程序的即时使用,在异常上不会发生很多事情:
对于程序生成的实验数据:如果出现严重错误,最坏的结果是没有数据记录。细微的变化,改变实验的结果是非常不可能的。即使在这种情况下,如果结果可疑,错误也会被记录下来;如果它是一个完全的异常值,人们仍然可以抛弃这个数据点。
总而言之:是的,我认为自己至少还是部分清醒的,我不认为让程序运行的全局异常处理例程一定是完全邪恶的。如前所述,这种决定可能是有效的,这取决于应用程序。在这种情况下,它被认为是一个有效的决定,而不是完全的胡说八道。但是请不要仅仅因为我们忽略了错误就指责我或其他为这个项目工作的人可能会炸毁世界。
旁注:该应用程序只有一个用户。它不像Windows或Office那样被数百万人使用,在这些地方,有异常的成本对用户来说已经非常不同了。