开发者

"Collection was modified; enumeration operation may not execute." on form disposal

"Collection was modified; enumeration operation may not execute." appears to be a common error with foreach loops, but I can't figure mine out. I have two classes of forms. One is begun on startup, and a button creates new instances of the second form, and displays them. When I close the secondary forms, I get an InvalidOperationException.

FirstFo开发者_StackOverflow社区rm.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.
    }
}


Can it be that it calls Dispose recursively? Can you have a look at the call stack when the exception occurs?

If this is the case, the broken collection would be the collection of controls on the form


If you click multiple times, then the reference in FirstForm may no longer point to whatever you are closing.

try

 private void button1_Click(object sender, EventArgs e)
 {
      var second = new SecondForm();
      second.Show();
 }


The problem was a PowerPacks.RectangleShape object I had placed on my second form and forgot about (because it wouldn't render.) I deleted the object, and the form disposed just fine.

Testing this further, I found that any control which requires a PowerPacks.ShapeContainer (LineShape, OvalShape, and RectangleShape,) cause this problem, but other PowerPacks objects don't.

I'm not sure why this happens, so if anyone figures out a workaround, I'd appreciate that. But for now I'll avoid PowerPacks shapes.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜