无法一次捕获所有异常C#

lin*_*ini 0 c# exception xml-serialization richtextbox winforms

我正在对一个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*haw 5

代码只会抛出一个异常,因此您无法捕获多个异常.

例如:

try
{
    throw new NotSupportedException();
    throw new InvalidOperationException();
}
catch (Exception ex)
{
    //ex will always be NotSupportedException and never InvalidOperationException.
}
Run Code Online (Sandbox Code Playgroud)

您无法使反序列化程序处理一个例外,然后继续 - 除非它是您自己的 - 在这种情况下,您必须在每个发生时捕获它们,记录它们然后再查看它们,或者如果您想要反应则为每个事件引发事件对他们来说,他们发生了.

异常用于打破程序的流程,因此当抛出一个程序时,它将停止正在执行的操作并中断所有其他执行,直到处理完毕.因此,一旦抛出第一个异常,反序列化器就会停止运行并中止.