0

VB 2010 Express を使用していますが、コードが無視され、エラー通知が表示されないことがあります。たとえば、me.Load を処理するサブの最後に次のコードがあります。

ここに画像の説明を入力

counter = counter はテスト行です。mPlayer は Toub のサウンド 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

上記のコード ブロックに書いたことにもかかわらず、一般的な をキャッチするのExceptionではなく、メソッドからスローされる可能性のある特定の種類の例外に注目することをお勧めしますOpen()。その理由は、現在のメソッドで処理する方法を知っている例外のみを処理し、他の例外をバブルアップさせたいからです。ライブラリのドキュメントを見て、どのタイプの例外がスローされ、それらを含めることができるかを確認する必要があります。

言及すべきもう 1 つの重要なことは、非常に正当な理由がない限り、空のcatchブロックを使用しないことです (現時点では考えられませんが、非常にまれな使用法がいくつかあると確信しています)。空catchは例外を飲み込むだけで、何もしません。例外があったことさえ通知しません。

例外を処理しない場合、例外はコール スタックの一番上までバブルアップし、デバッガーはUnhandled Exceptionメッセージを表示してそこで停止します。それを行っていない場合は、呼び出しスタックのさらに下の例外を飲み込んでいるか、Hans Passant のコメントで言及されている可能性のある重複で言及されているバグに遭遇しています。

MSDN には、.NET 言語での例外処理のかなり適切な概要があります。この件についてもっと読むことをお勧めします。

于 2012-08-12T11:05:47.247 に答える