gpt4 book ai didi

c# - 在 WPF 应用程序中全局捕获异常?

转载 作者:IT王子 更新时间:2023-10-29 03:29:17 28 4
gpt4 key购买 nike

我们有一个 WPF 应用程序,它的一部分可能会在运行时抛出异常。我想全局捕获任何未处理的异常并记录它们,否则继续执行程序,就好像什么都没发生一样(有点像 VB 的 On Error Resume Next )。

这在 C# 中可能吗?如果是这样,我究竟需要将异常处理代码放在哪里?

目前我看不到任何可以包装 try 的点。/catch并捕获所有可能发生的异常。即便如此,我也会因为抓到而离开已经执行的任何东西。或者我在这里思考的方向非常错误?

预计到达时间:因为下面很多人指出:应用程序不是为了控制核电站。如果它崩溃了,那没什么大不了的,但主要与 UI 相关的随机异常在使用它的上下文中会令人讨厌。有(并且可能仍然是)其中一些,因为它使用插件架构并且可以被其他人扩展(在这种情况下也是学生;所以没有经验的开发人员能够编写完全无错误的代码)。

至于被捕获的异常:我确实将它们记录到日志文件中,包括完整的堆栈跟踪。这就是该练习的全部意义所在。只是为了反驳那些将我的类比与 VB 的 OERN 过于字面的人。

我知道盲目忽略某些类别的错误是危险的,并且可能会损坏我的应用程序实例。如前所述,该程序对任何人来说都不是关键任务。没有人会以人类文明的生存为赌注。它只是一个用于测试某些设计方法的小工具。软件工程。

对于应用程序的直接使用,异常不会发生很多事情:

  • 无异常处理 - 错误对话框和应用程序退出。必须重复实验,但可能是针对另一个对象。没有记录任何错误,这是不幸的。
  • 通用异常处理 - 良性错误被捕获,无害。这应该是从我们在开发过程中看到的所有错误来判断的常见情况。忽略此类错误应该不会立即产生后果;核心数据结构经过充分测试,可以轻松应对。
  • 通用异常处理 - 捕获严重错误,稍后可能会崩溃。这可能很少发生。到目前为止,我们从未见过它。无论如何都会记录错误,并且崩溃可能是不可避免的。所以这在概念上类似于第一种情况。除了我们有一个堆栈跟踪。在大多数情况下,用户甚至不会注意到。

  • 至于程序生成的实验数据:一个严重的错误,最坏的情况是不会记录任何数据。微小的改变几乎不可能改变实验结果。即使在这种情况下,如果结果看起来可疑,就会记录错误;如果它是一个完全异常值,仍然可以丢弃该数据点。

    总结一下:是的,我认为自己至少还是部分理智的,我不认为全局异常处理例程会使程序运行必然是完全邪恶的。如前所述,这种决定可能是有效的,具体取决于应用程序。在这种情况下,它被认为是一个有效的决定,而不是彻头彻尾的胡说八道。 对于任何其他应用程序,该决定可能看起来不同。 但是请不要仅仅因为我们忽略了错误就指责我或参与该项目的其他人可能会炸毁世界。

    旁注:该应用程序只有一个用户。它不像 Windows 或 Office 那样被数百万人使用,在这些东西中,让异常冒泡给用户的成本一开始就已经大不相同了。

    最佳答案

    使用 Application.DispatcherUnhandledException Event .见 this question有关摘要(请参阅 Drew Noakes' answer )。

    请注意,仍有一些异常会阻止您的应用程序成功恢复,例如在您尝试保存到数据库时出现堆栈溢出、内存耗尽或网络连接丢失等情况。

    关于c# - 在 WPF 应用程序中全局捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/793100/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com