0

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

在此处输入图像描述

counter = counter 是一条测试线。mPlayer 是 Toub 的 sound midi dll 中的一个对象,定义如下:

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

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

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

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

4

1 回答 1

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

尽管我在上面的代码块中写了些什么,我还是鼓励你不要抓住一个 general Exception,而是专注于可能从Open()方法中抛出的特定类型的异常。原因是您只想处理您知道如何在当前方法中处理的异常,并让其他异常冒泡。您需要查看该库的文档并查看可以抛出哪些类型的异常并包含它们。

另一件重要的事情是,除非你有很好的理由,否则不要使用空catch块(我现在想不出,但我敢肯定有一些非常罕见的用途)。一个空的catch只会吞下异常而不用它做任何事情。它甚至不会通知您有异常。

现在,如果您不处理任何异常,则异常应该一直冒泡到调用堆栈的顶部,并且调试器应该显示一条Unhandled Exception消息并停在那里。如果它没有这样做,那么您要么在调用堆栈的下方进一步吞下异常,要么遇到在他的评论中提到的可能重复的Hans Passant 中提到的错误

MSDN对 .NET 语言中的异常处理有相当不错的总结。我鼓励你阅读更多关于这个主题的内容。

于 2012-08-12T11:05:47.247 回答