2010-05-18 68 views
0

「收集已被修改;枚舉操作可能無法執行。」似乎是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. 
    } 
} 
+2

你能添加異常的堆棧跟蹤嗎? – dtb 2010-05-18 21:36:02

回答

0

的問題是我已經把我的第二個表上的忘記了(因爲它不會渲染。)我刪除的對象,形式佈置就好了一個PowerPacks.RectangleShape對象。

測試這進一步,我發現,這需要一個PowerPacks.ShapeContainerLineShapeOvalShapeRectangleShape)任何控制導致此問題,但其他PowerPacks對象沒有。

我不確定爲什麼會發生這種情況,所以如果有人找出解決方法,我會很感激。但現在我會避免PowerPacks形狀。

0

可以這麼認爲,它調用Dispose遞歸?發生異常時,您可以查看調用堆棧嗎?

如果是這樣的情況下,破集合會形式

+0

我不知道我會如何破壞任何東西......我改變的只是在'FirstForm'中看到的代碼。我覺得這不應該破壞任何東西... – dlras2 2010-05-18 22:00:45

0

上的控件的集合。如果你點擊多次,然後在FirstForm引用可能不再指向任何你正在關閉。

嘗試

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

不,不要在表現出它後立即處理表格。 – 2010-05-18 23:35:33

+0

即使我只創建第二個表單的單個實例,它也不能正確處理。 – dlras2 2010-05-19 04:53:50

+0

@Hans - oops :)我怪我自己。原來的觀點是,雖然。代碼編輯。 – 2010-05-19 16:01:00

相關問題