わかりました、詳しく説明しましょう...
キャッチごとに「結果」が必要なようです。特定のキャッチに対して何も起こらないようにしたい場合は、それを含めないか、コード内の別の場所に移動させます。
Try
'Some Code
Catch ex As ThreadAbortException
'Do something(ex: HandleExceptionSub())
Catch ex As Exception
HandleException(ex)
End Try
例外を「キャッチ」した場合は、それを処理する必要があります。
編集:
また、try catch のしくみについて詳しく説明するのに役立つ次の情報も見つけました。
複数のキャッチ ブロック
try ブロックは、複数の catch ブロックを使用して処理できる複数の例外をスローできます。より特殊化された catch ブロックは、一般化されたブロックの前に来る必要があることに注意してください。そうしないと、コンパイラはコンパイル エラーを表示します。 複数のキャッチ ブロック
これはデバッガーの「バグ」ではありません。デバッガーは、すべての例外を見つけて処理するのに役立ちます。
編集:この例外は、別の投稿で読んだものから完全に回避できるようです。そして、例外を処理しないよりも、例外を回避した方がよいようです。
ThreadAbortException の処理
編集: try で複数の catch ブロックに関する詳細情報が見つかりました。これは MSDN からのもので、空の catch ブロックの後に catch ブロックが到達することはないと述べています... Try Catch finally ステートメント
これはバグではなく、コード内のすべての例外の処理を強制するために期待される機能であることをさらに証明します。
編集: コメントで一部の人々をまっすぐに設定するために、これが本当にバグであるかどうかを確認するための非常に単純なテスト プログラムを作成しました。私の調査結果は、catch ブロックが完全に機能することです。複数の Catch ブロックを使用して Try Catch を作成する MSDN の文書化された方法に従うと、彼らが言うように機能するようです。
private void button1_Click(object sender, EventArgs e)
{
try
{
if (textBox1.Text == "")
{
throw new ArgumentNullException("textBox1", "TextBox can not be empty");
}
else
{
MyString(textBox1.Text);
}
}
catch (ArgumentNullException ex)
{
//nothing
}
catch (Exception ex)
{
MessageBox.Show("Test: " + ex.Message);
}
}
private int MyString(string text)
{
return int.Parse(text);
}
ボタンとテキストボックスを備えた簡単なフォームを作成しました。テキストボックスが空の場合、ArgumentNullException をスローし、「MyString」で文字列を解析して整数に変換し、「FormatException」をスローします。「キャッチされた」例外を処理する正しい方法ではない空白のキャッチブロックを持つことは、実際には機能します。私が見る限り、これはバグではありません。どうやら私が Teejay と Konrad に同意できる唯一のことは、try catch メソッドを使用して ThreadAbortException をキャッチして処理することはできないということです。Konrad のソリューションは、try catch をコーディングするための最良の方法です。