我目前的项目运行良好,所以像任何理智的人一样,我正试图故意破坏它。一种可能性是某些资源可能会丢失。当我忽略在运行文件夹中放置一个 dll 时,我的应用程序会严重崩溃。
是否可以“优雅地”处理因缺少资源而导致的异常?
我的一个类导入了一个引用“TcAdsDll.dll”的资源。.
....
Imports Okuma.EthernetIO
....
在该类中,我能够捕获尝试使用此资源时生成的异常:
Try
Dim objAdsStateInfo As TwinCAT.Ads.StateInfo = Nothing
Try
'Do a bunch of fun stuff with Ethernet...
Catch...
'catch Ethernet errors
End Try
Catch ex As Exception
'This catches the exception generated when I try to instantiate an object that uses the dll which is no longer present
End Try
但是,在我处理了这个异常之后,程序仍然会崩溃。一旦退出初始化阶段,表单 main 就会被加载,我会一直到该事件的 end sub。一旦我执行“End Sub”语句(逐行调试),我就会收到消息:
DllNotFoundException was unhandled
Unable to load 'tcadsdll.dll': The specified module could not be found.
(Exception from HRESULT: 0x8007007E)
在对使用它的资源做任何事情之前,我已经添加了代码来检查这个 .dll 是否存在,但是因为它通过导入语句链接到类中,它仍然会尝试处理它并崩溃。我是否必须重建资源 (Okuma.EthernetIO) 以包括检查 dll 文件?或者有没有一种优雅的方法可以在我的应用程序中轻松解决这个问题,而我只是不知道?
更新:在跳转到包含导入的类之前检查 dll 文件是否存在对我有用。它首先阻止了异常的产生。但是问题仍然存在:
有没有办法处理 dll not found 异常?