[英]Collection was modified; enumeration operation may not execute. When the jobject is modified
[英]“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.ShapeContainer
( LineShape
, OvalShape
和RectangleShape
)的任何控件OvalShape
導致此問題,而其他PowerPacks
對象則不會。
我不確定為什么會這樣,因此,如果有人想出解決方法,我將不勝感激。 但是現在我將避免使用PowerPacks
形狀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.