0

私はxmlファイルをデシリアライズしており、以下のコードを使用してすべての例外アートをキャプチャしようとしていますが、例外を1つだけキャプチャしています。私がここでやっている間違いは何ですか??

コード:

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;
    }
}
4

1 に答える 1

5

コードによってスローされる例外は 1 つだけであるため、複数の例外をキャッチすることはできません。

例えば:

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

デシリアライザーに 1 つの例外を処理させてから実行させることはできません (それが自分のものでない限り)。その場合、発生するたびにそれらをトラップし、ログに記録してから後で表示するか、反応したい場合はそれぞれのイベントを発生させる必要があります。彼らが起こったように彼らに。

例外はプログラムのフローを中断するために使用されるため、例外がスローされると、実行中の処理が停止し、処理されるまで他のすべての実行が中断されます。このため、デシリアライザーは実行を停止し、最初の例外がスローされるとすぐに中止されました。

于 2012-11-06T14:56:21.347 に答える