我正在使用VB 2010 Express,有时我的代码被忽略,没有任何错误通知。例如,我在sub的末尾处有这个代码来处理我.Load:
counter = counter是一条测试线。 mPlayer是来自Toub的声音midi dll的对象,定义如下:
Dim mPlayer As MyMediaPlayer.MyWinPlayer
mPlayer = New MyMediaPlayer.MyWinPlayer()
当文件名包含有效的midi文件时,一切正常,并显示msgbox。当midi文件无效时,我想生成一个错误或者AudioLength为NULL或一些奇怪的值。相反,不会触发任何错误,调试器只会退出子。
更详细:调试器在第一个断点处停止。然后,当我单击“继续”时,将显示表单,而调试器不会到达其他断点或生成MsgBox。
你能解释一下如何让VB给我错误吗?
答案 0 :(得分:0)
我不熟悉您正在使用的库,但由于文件无效而导致的任何异常都将来自MyWinPlayer.Open()
方法(vb-speak中的函数)。因此,如果抛出异常,则需要在try-catch中处理该异常。如果你当前的sub没有处理异常,那么异常将冒泡到调用方法并继续运行,直到有一些地方处理异常。
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
只会吞下异常而不会对其执行任何操作。它甚至不会通知你有例外。
现在,如果你不处理任何异常,异常应该一直冒出来到调用堆栈的顶部,调试器应该显示Unhandled Exception
消息并停在那里。如果它没有这样做,那么你要么在调用堆栈中进一步吞下异常,要么遇到他在评论中提到的possible duplicate Hans Passant中提到的错误
MSDN在.NET语言中有相当不错的summary of exception handling。我鼓励你阅读更多关于这个主题的内容。