簡體   English   中英

“收藏被修改; 枚舉操作可能無法執行。”

[英]“Collection was modified; enumeration operation may not execute.” on form disposal

“集合已被修改;枚舉操作可能無法執行。” 似乎是foreach循環的常見錯誤,但我無法弄清楚。 我有兩類表格。 第一個在啟動時開始,然后一個按鈕創建第二個表單的新實例,並顯示它們。 關閉輔助表單時,我收到一個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.
    }
}

可以遞歸調用Dispose嗎? 發生異常時,您可以看一下調用堆棧嗎?

在這種情況下,損壞的集合將是表單上的控件集合。

如果您單擊多次,則FirstForm中的引用可能不再指向您要關閉的內容。

嘗試

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

問題出在我放置在第二個表單上的PowerPacks.RectangleShape對象上,並且忘記了(因為它無法渲染。)我刪除了該對象,並且該表單放置得很好。

進一步進行測試,我發現需要PowerPacks.ShapeContainerLineShapeOvalShapeRectangleShape )的任何控件OvalShape導致此問題,而其他PowerPacks對象則不會。

我不確定為什么會這樣,因此,如果有人想出解決方法,我將不勝感激。 但是現在我將避免使用PowerPacks形狀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM