将错误消息从C#DLL返回到C#程序?

时间:2011-08-25 12:12:28

标签: c# winforms dll error-handling

我将一个winforms程序类分解为一个单独的DLL。 DLL在所有方法上使用try-catch来捕获错误。当仍然是一个winforms类时,我会捕获错误,记录它,然后通过MessageBox通知用户。使用DLL我正在捕获错误,记录它 - 但不知道如何通知用户有错误?

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

5 个答案:

答案 0 :(得分:7)

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

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

如果确实要添加更多信息,请使用包含该捕获异常的适当构造函数作为innerException值抛出适当的新异常。

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

我能想到的一种方法是从DLL中抛出一个通用异常,您可以在app中捕获该异常,然后显示从dll返回的消息。 似乎没那么明智。

答案 3 :(得分:1)

您应该继续在您的dll中引发异常(在您记录之后)

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

答案 4 :(得分:1)

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