0

コレクションが変更されました。列挙操作が実行されない可能性があります。」ループでよくあるエラーのようですforeachが、私にはわかりません。フォームには2つのクラスがあります。1つは起動時に開始され、ボタンは2番目のフォームの新しいインスタンスを作成して表示します。二次フォームを閉じるInvalidOperationExceptionと、が表示されます。

FirstForm.cs

public partial class FirstForm : Form
{
    SecondForm frmSecond;
    ...
    private void button1_Click(object sender, EventArgs e)
    {
        frmSecond= new SecondForm ();
        frmSecond.Show();
    }
}

SecondForm.designer.cs

partial class SecondForm
{
    ...
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing); // InvalidOperationException thrown here.
    }
}
4

3 に答える 3

0

Disposeを再帰的に呼び出すということでしょうか?例外が発生したときのコールスタックを確認できますか?

この場合、壊れたコレクションはフォーム上のコントロールのコレクションになります

于 2010-05-18T21:37:26.777 に答える
0

複数回クリックすると、FirstFormの参照が閉じているものを指さなくなる場合があります。

試す

 private void button1_Click(object sender, EventArgs e)
 {
      var second = new SecondForm();
      second.Show();
 }
于 2010-05-18T22:28:00.780 に答える
0

問題はPowerPacks.RectangleShape、2番目のフォームに配置したオブジェクトを忘れてしまったことです(レンダリングされないため)。オブジェクトを削除すると、フォームは正常に破棄されました。

PowerPacks.ShapeContainerこれをさらにテストすると、 (LineShape、、、OvalShapeおよび、)を必要とするコントロールはRectangleShapeこの問題を引き起こしますが、他のPowerPacksオブジェクトは引き起こさないことがわかりました。

なぜこれが発生するのかわからないので、誰かが回避策を見つけたら、それをいただければ幸いです。しかし、今のところ私はPowerPacks形を避けます。

于 2010-05-19T13:09:51.230 に答える