好的,让我详细说明一下...
看起来每个catch中都必须有一个"result"。如果你只是想让某个特定的catch什么也不做,那就不要包含它,或者将其移动到代码的其他位置。
Try
'Some Code
Catch ex As ThreadAbortException
'Do something(ex: HandleExceptionSub())
Catch ex As Exception
HandleException(ex)
End Try
如果你“捕获”了一个异常,你必须对它采取一些措施。
编辑:
我还发现了这个信息,可以帮助你进一步了解try-catch的工作原理:
多个catch块
try块可以抛出多个异常,这些异常可以使用多个catch块来处理。请记住,在一般化的catch块之前应该有更专业的catch块。否则,编译器将显示编译错误。
Multiple Catch Blocks
这并不是调试器的“缺陷”。调试器旨在帮助您找到并处理所有异常。
编辑:
从我在另一篇文章中读到的内容来看,似乎可以完全避免这种异常。而且,避免异常比不处理它更好。
Handling ThreadAbortException
编辑:
刚刚在MSDN上找到了更多关于try中多个catch块的信息。它指出,在一个空白的catch块之后的catch块将永远不会被执行...Try Catch Finally Statement
这进一步证明了这不是一个bug,而是期望的功能,以强制处理代码中的所有异常。
编辑:
为了让评论区的某些人明白,我创建了一个非常简单的测试程序来查看这是否确实是一个bug。我的发现是catch块完美地工作。似乎遵循MSDN文档中创建具有多个Catch块的Try Catch的方式正如他们所说的那样运行良好。
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)
{
}
catch (Exception ex)
{
MessageBox.Show("Test: " + ex.Message);
}
}
private int MyString(string text)
{
return int.Parse(text);
}
我创建了一个简单的表单,里面有一个按钮和一个文本框。如果文本框为空,我会抛出一个ArgumentNullException异常,在“MyString”中将一个字符串解析为整数,这会引发一个“FormatException”异常。有一个空的try catch块,这不是处理"caught"异常的正确方法,但确实有效。据我所见,这不是一个bug。显然,我唯一能同意Teejay和Konrad的观点是,你不能使用try catch方法捕获和处理ThreadAbortException异常。Konrad的解决方案是编写try catch的最佳方式。