我正在对xml文件进行去序列化,并且我正在尝试使用以下代码捕获所有异常艺术,但它只捕获一个异常。我在这里做的错误是什么?
代码:
StringBuilder exBuilder;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
var fileName = openFileDialog1.FileName;
mruOpenRseConfig.AddRecentFile(fileName);
try
{
ConfigDeserialized = MyConfig.DeserializeFromXmlFile(fileName);
}
catch (Exception ex)
{
if (ex is DataConsistencyException ||
ex is XmlException)
{
exBuilder.Clear();
exBuilder.Append(ex.Message + Environment.NewLine);
RichTextBox richTextBox = new RichTextBox();
richTextBox.Text = exBuilder;
richTextBox.Dock = DockStyle.Fill;
Form richMessageBox = new Form
{
StartPosition = FormStartPosition.CenterScreen,
ControlBox = true,
Text = "Error in File",
MaximizeBox = false,
MinimizeBox = false
};
richMessageBox.Controls.Add(richTextBox);
richMessageBox.ShowDialog();
return;
}
throw;
}
}
答案 0 :(得分:5)
代码只会抛出一个异常,因此您无法捕获多个异常。
例如:
try
{
throw new NotSupportedException();
throw new InvalidOperationException();
}
catch (Exception ex)
{
//ex will always be NotSupportedException and never InvalidOperationException.
}
你不能让反序列化程序处理一个例外然后继续 - 除非它是你自己的 - 在这种情况下你必须在每个发生时捕获它们,记录它们然后再查看它们,或者引发事件每一个如果你想对它们作出反应就会发生。
异常用于打破程序流,因此当抛出一个程序时,它将停止正在执行的操作并中断所有其他执行,直到处理完毕。因此,一旦抛出第一个异常,反序列化器就会停止运行并中止。