我目前的項目運行良好,所以像任何理智的人一樣,我試圖打破它的目的。一種可能是某些資源可能會丟失。當我忽略在運行文件夾中放入DLL時,我的應用程序崩潰壯觀。處理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
然而,當我處理這個異常,程序仍繼續崩潰。 一旦退出初始化階段,就會加載form main,並且一直到該事件的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沒有發現異常?
非常簡單的啓動應用程序與最小的依賴關係,以啓動前檢查環境的健全性?也可以顯示你的啓動畫面。 –
...或者在您嘗試使用它們之前測試啓動時是否存在所需的文件。因爲您將會或者已經編寫安裝程序,您的應用程序可以知道在哪裏找到它們。 – Plutonix
@Plutonix它正在啓動時檢查(初始化期間)。一個困難的問題是我已經將功能分成了大約17個類。我的初始化例程在Main的New()子部分被調用。該初始化在另一個類中調用「InitEthernetIO()」。這就是你看到我上面發佈的代碼的地方。它是包含違規資源的imports語句的類,而不是表單main。 –