没有异常通知,但未执行以下代码

时间:2012-08-12 10:35:57

标签: vb.net

我正在使用VB 2010 Express,有时我的代码被忽略,没有任何错误通知。例如,我在sub的末尾处有这个代码来处理我.Load:

enter image description here

counter = counter是一条测试线。 mPlayer是来自Toub的声音midi dll的对象,定义如下:

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

当文件名包含有效的midi文件时,一切正常,并显示msgbox。当midi文件无效时,我想生成一个错误或者AudioLength为NULL或一些奇怪的值。相反,不会触发任何错误,调试器只会退出子。

更详细:调试器在第一个断点处停止。然后,当我单击“继续”时,将显示表单,而调试器不会到达其他断点或生成MsgBox。

你能解释一下如何让VB给我错误吗?

1 个答案:

答案 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。我鼓励你阅读更多关于这个主题的内容。