【问题标题】:Returning error messages from a C# DLL to a C# program?将错误消息从 C# DLL 返回到 C# 程序?
【发布时间】:2011-11-03 15:26:24
【问题描述】:

我已将一个 winforms 程序类拆分为一个单独的 DLL。 DLL 对所有方法都使用 try-catch 来捕获错误。当仍然是一个 winforms 类时,我会捕获错误,记录它,然后通过 MessageBox 通知用户。使用 DLL,我发现了错误并记录了它 - 但不确定如何通知用户出现错误?

如何最好地通知用户 DLL 中存在错误?

【问题讨论】:

  • 捕获所有异常几乎总是一个坏主意,尤其是过早地这样做。 catch 子句属于 Form,而不是你的 DLL。

标签: c# winforms dll error-handling


【解决方案1】:

如果你想记录它,那么好吧,抓住它,记录它,然后抛出一个适当的异常,让消费者决定如何最好地处理它。如果您没有要添加的值,也没有要更改的语义,那么只需在您的 DLL 中执行此操作:

catch(SpecificException ex)
{
     LogException(ex);
     throw;
}

如果您确实有更多信息要添加,则使用适当的构造函数引发适当的新异常,该构造函数将捕获的异常作为innerException 值包含在内。

您不应该做的(我见过太多人尝试)是“聪明地”确定正在使用 DLL 的应用程序类型,并尝试从 DLL 中显示 UI。即使您确实获得了所有当前使用场景的正确性(“它只被 WinForms 应用程序使用过”),您现在也限制了未来的重用潜力。

您应该让使用者决定自己的错误处理策略,而不是试图从 DLL 中强加一个。

【讨论】:

    【解决方案2】:

    我能想到的一种方法是从 DLL 抛出一个通用异常,您可以在应用程序中捕获该异常,然后相应地显示从 dll 返回的消息。 似乎不太明智。

    【讨论】:

      【解决方案3】:

      不要发现错误!抓住它,记录它,然后如果必须重新抛出它,但不要吞下异常。让它传播到宿主应用程序,然后它可以随意处理它(例如显示一个消息框)。

      【讨论】:

        【解决方案4】:

        你应该继续在你的 dll 中抛出异常(在你记录之后)

        一个好的做法是尽可能地处理错误和异常。在您的情况下,应该在 winform 应用程序中。

        【讨论】:

          【解决方案5】:

          正如其他人所说,在记录后抛出异常。如果您在该 dll 中有一个单独的线程/计时器并且没有任何东西可以扔给它,请通过主机应用程序可以侦听的事件进行通知。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-03-04
            • 1970-01-01
            • 2018-04-11
            • 1970-01-01
            • 1970-01-01
            • 2020-07-28
            相关资源
            最近更新 更多