【问题标题】:Exception handling for WPF ApplicationWPF 应用程序的异常处理
【发布时间】:2011-06-12 10:52:47
【问题描述】:

我有一个基本的 WPF 应用程序设置如下: 带有 SQL Compact DB 的视图、视图模型、业务对象和 Dals。 数据库调用是通过 Linq2Sql 进行的。 应用程序是单用户。 (每个用户一个 db)。

假设在 CRUD 操作期间 Dal 内部发生异常或用户删除了数据库,那么应该在哪里进行异常处理。

此外,如果出于某种原因在 View/ViewModel 中引发异常,我不希望系统崩溃。我该如何处理。我是否应该只通知用户发生错误并重新创建 View/ViewModel 以便用户可以继续。 ViewModel 仅通过消息传递与其他 ViewModel 通信(例如需要刷新某些内容)。

【问题讨论】:

  • 你的问题不清楚,能否解释一下

标签: c# wpf exception-handling


【解决方案1】:

最简单的答案是它真的取决于应用程序的确切要求。

详细信息:首先,您应该在有可能出现异常情况的情况下进行异常处理。在执行 CRUD 操作时,在视图模型中执行某些操作时,甚至在创建视图时。用户肯定不希望应用程序崩溃。所以最好的办法是处理异常,自定义错误消息,使其对用户有意义并将其显示给用户,以便她/他知道发生了错误。还询问用户现在要做什么(这实际上再次取决于应用程序的要求),但例如如果数据库文件已被删除,请询问用户是否要创建一个新文件或类似的东西

【讨论】:

  • +1 - 用户不关心数据访问问题的细节,他们只想修复它。捕获所有可预测或可预见的内容,其他所有内容都应该冒泡并在应用程序级别进行处理 - 确保您登录时尽可能接近其原始状态。
【解决方案2】:

在您的 WPF 应用程序的 OnStartup() 方法中,您可以订阅 Application.Current.DispatcherUnhandledException 异常事件,该事件允许您记录异常,通知用户例外情况并在适当的情况下建议任何补救措施,并通过设置 e.Handled = true 取消终止应用程序。

只有在可以解决异常原因的情况下,您才应该取消终止应用程序,否则您可能会使应用程序处于未定义状态。

【讨论】:

    【解决方案3】:

    数据库问题应在您的 dal 中处理,dal 应通知某人有关消息传递/事件的问题。

    视图/视图模型的异常应该在这个类中捕获,除非你有一些像 caliburn 这样的 mvvm 框架,它可以独立地处理这些东西。 捕获异常后,应将消息发送到将处理问题的外壳/视图管理器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 2014-06-16
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      相关资源
      最近更新 更多