我将一个winforms程序类分解为一个单独的DLL。 DLL在所有方法上使用try-catch来捕获错误。当仍然是一个winforms类时,我会捕获错误,记录它,然后通过MessageBox通知用户。使用DLL我正在捕获错误,记录它 - 但不知道如何通知用户有错误?
如何最好地通知用户DLL中存在错误?
答案 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中有一个单独的线程/计时器,并且没有任何东西可以将它抛出,请通过主机应用程序可以监听的事件进行通知。