【问题标题】:Show Correct Error Message Thrown from Windows Form显示从 Windows 窗体抛出的正确错误消息
【发布时间】:2013-03-30 04:28:02
【问题描述】:

我正在开发一个Windows Forms 应用程序。构造函数中发生了很多事情,我有几个 try-catch 块。但是,作为最终结果,我想在 form_shown 事件上显示错误消息。我不确定这样做的正确方法是什么。我正在考虑使字符串变量从所有表单中可见,然后在每个try-catch 块中设置不同的消息,这些消息将通过在我想要执行此操作的form_shown 事件中调用显示此字符串变量的值来显示.

但这似乎不是很好的方法。我更喜欢以某种方式重新抛出异常或类似的东西并在form_shown 事件中处理它。我认为这更接近正确的错误处理方法。

【问题讨论】:

  • 您在 try-catch 块中处理的错误是合法的失败,还是类似于验证错误的东西?听起来您可能正在使用异常来处理您的程序流程。这可能是一个下游问题?

标签: c# winforms error-handling


【解决方案1】:

你违反了两个重要的guidelines

在构造函数中做最少的工作。除了捕获构造函数参数之外,构造函数不应该做太多工作。任何其他处理的成本应延迟到需要时。

如果合适,请从实例构造函数中抛出异常。 构造函数应该像任何方法一样抛出和处理异常。具体来说,构造函数不应捕获和隐藏任何它无法处理的异常。

所以,回答您的问题,如果在构造函数阶段出现任何问题:立即显示。应该是说对象不能被构造。

我不知道构造函数中发生的很多东西是什么,但我很确定你应该把它推迟到稍后的时刻,例如表单加载。但仍然:显示异常发生的地方。

【讨论】:

  • 好吧,尽管我没有太多经验,但我同意你的一切。然而,由于糟糕的架构和其他一些事情,这就是这个项目的方式,所以我尽量做到最好。
  • 但是我认为您应该能够从构造函数中重构代码?用于程序流的异常(即它们不仅被捕获而且被抛出)更难处理,我认为目前最好的选择是将异常本身收集在一个列表中并显示它们的消息(也来自任何内部异常) 当表单已加载时。但是你应该尝试用if-then-else逻辑替换它们。
  • 目前逻辑将保留在构造函数中(经理决定)。除此之外,我将收集您提供的例外情况。
猜你喜欢
  • 2016-06-27
  • 2011-03-13
  • 2017-11-13
  • 2015-07-03
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多