简体   繁体   中英

“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 .

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.
    }
}

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM