从c# DLL返回错误消息到c#程序
本文关键字:程序 消息 返回 DLL 错误 | 更新日期: 2023-09-27 18:06:42
我已经将一个winforms程序类派生到一个单独的DLL中。DLL对其所有方法使用try-catch来捕获错误。当仍然是winforms类时,我会捕获错误,记录它,然后通过MessageBox通知用户。与DLL我捕捉错误,记录它-但我不知道如何通知用户有一个错误?
我怎样才能最好地通知用户DLL中有错误?
如果您想记录它,那么好吧,捕获它,记录它,然后抛出一个适当的异常,让消费者决定如何最好地处理它。如果您没有要添加的值,也没有要更改的语义,那么只需在DLL中执行此操作:
catch(SpecificException ex)
{
LogException(ex);
throw;
}
如果你有更多的信息要添加,然后抛出一个适当的新异常,使用一个适当的构造函数,包括捕获的异常作为innerException
值。
你不应该做的(我见过太多的人尝试过)是"聪明地"确定什么类型的应用程序正在使用DLL,并试图从DLL中显示UI。即使你把所有当前的使用场景都弄对了("它只被WinForms应用程序使用过"),你现在也限制了未来的重用潜力。
您应该让消费者决定自己的错误处理策略,而不是试图从DLL中强加一个。
不要捕捉错误!捕获它,记录它,然后在必要时重新抛出,但不要吞下异常。让它向上传播到主机应用程序,然后主机应用程序可以按照自己的意愿处理它(例如显示一个消息框)。
我能想到的一种方法是从DLL抛出一个通用异常,您可以在应用程序中捕获该异常,然后相应地显示从DLL返回的消息。似乎不太明智。
你应该继续在你的dll中抛出异常(在你记录了它之后)
最好的做法是在最后可能的机会处理错误和异常。在您的例子中,它应该在winform应用程序中。
正如其他人所说,在记录之后抛出异常。如果在该dll中有一个单独的线程/计时器,并且没有什么可以将其抛出,则通过一个主机应用程序可以侦听的事件通知。