2012-08-12 132 views
0

我使用VB 2010 Express,有時我的代碼被忽略,沒有任何錯誤通知。例如,我有這樣的代碼在該處理me.Load子的端部:沒有例外通知,但下面的代碼沒有執行

enter image description here

計數器=計數器是一個測試線。 MPlayer是從Toub的聲音MIDI DLL中的對象,這樣的定義:

Dim mPlayer As MyMediaPlayer.MyWinPlayer 
mPlayer = New MyMediaPlayer.MyWinPlayer() 

當文件名中包含一個有效的MIDI文件,所有的工作和MSGBOX的顯示。當midi文件無效時,我想要生成一個錯誤或AudioLength爲NULL或一些奇怪的值。相反,沒有錯誤被觸發,調試器只是退出子。

更多詳細信息:調試器停在第一個斷點處。然後,當我點擊'繼續'時,窗體就會顯示出來,調試器不會到達其他斷點或永遠不會產生MsgBox。

你能解釋一下如何讓VB給我錯誤嗎?

+0

[VS2010在64位版本的Windows上的WinForms應用程序中未顯示未處理的異常消息](http://stackoverflow.com/questions/4933958/vs2010-does-not-show-unhandled-異常消息在一個winforms-application-on-a) – 2012-08-12 11:04:37

+0

感謝Hans,我會檢查這個線程!對不起,我發現之前沒有找到它! – Davide 2012-08-12 11:44:20

+0

這確實是同樣的錯誤,謝謝漢斯。我不確定這個問題是否是重複的,因爲語言(VB vs C#)和IDE(我使用VS的免費版本)是不同的(例如,這意味着第一個解決方案你鏈接的線程對我來說是不可能的)。我通過編寫一個明確的try catch語句來解決它。再次感謝! – Davide 2012-08-12 16:21:47

回答

0

我不熟悉你正在使用的庫,但任何由於無效文件引起的異常將來自MyWinPlayer.Open()方法(vb-speak中的函數)。所以如果拋出一個異常,你需要在try-catch中處理這個異常。如果你當前的子不處理異常,那麼異常將冒泡到調用方法,並繼續前進,直到有一些地方處理異常。

一個try-catch塊會是這樣的(我不寫了很多在vb.net了,語法可能不是完美的):

Try 

    mPlayer.Open(filename); 

Catch ex As Exception 

    'Do something with the exception 
    ' (e.g. write a log, set a value, or display error message) 

End Try 

儘管我已經寫在上面的代碼塊,我鼓勵你不要捕捉到一般的Exception,而是專注於可以從Open()方法拋出的特定類型的異常。原因是你只想處理你知道如何處理當前方法的異常,並讓其他異常冒出來。您需要查看庫的文檔並查看可以拋出哪些類型的異常並將其包含在內。除非你有一個很好的理由,不要使用一個空的catch塊(我現在無法想象,但我確信有一些非常罕見的用途)。一個空的catch只會吞下異常,而不會對它做任何事情。它甚至不會通知您存在異常。

現在,如果您沒有處理任何異常,則異常應該一直冒泡到調用堆棧的頂部,調試器應該顯示一條消息並在那裏停止。如果不這樣做,那麼無論你正在進一步吞嚥異常下降調用堆棧,或者你正在運行成在possible duplicate漢斯帕桑特在他的評論

MSDN提到提到的錯誤有一個在相當不錯的summary of exception handling。 NET語言。我鼓勵你閱讀更多關於這個問題。

+0

非常感謝您的詳細解答!你是個好人!我一定會看看微軟的指南!恐怕我碰到了這個bug: -/ 再次感謝! – Davide 2012-08-12 11:48:11

+0

我完全按照你的解釋解決了它,你的語法非常完美! – Davide 2012-08-12 16:22:36