2011-11-01 51 views
0

我在我的MDI應用程序中有一個註銷菜單選項。在註銷時,我想關閉所有打開的表單。目前我正在使用下面的代碼片段來實現這一點;爲什麼它不投擲「收集被修改;枚舉操作可能不會執行」異常

For Each f As Form In My.Application.OpenForms 
    If f.Name = Me.Name Then 
     For Each child As Form In f.MdiChildren 
      child.Close() 
     Next 
    Else 
     f.Close() 
    End If 
Next 

它在我的測試環境中工作的完美,儘管我預計For Each循環將拋出「集合被修改;枚舉操作可能不會執行」例外。因爲在每個子窗體的Close()調用中,f.MdiChidren集合被修改,這讓我感到很驚訝。有人可以告訴我爲什麼它不會拋出異常?

然而,它拋出了「集合被修改;枚舉操作可能不會執行」在客戶端系統中。

+0

聽起來好像集合在您的測試環境中未被修改。現場環境的修復將首先將表單添加到單獨的列表中,並在關閉它們的列表上循環。 – JonAlb

+0

MdiChildren返回*數組*,而不是集合。您不會接近診斷用戶的崩潰。 –

+0

@JonAlb:我不認爲是這種情況,我使用了斷點並驗證了子表單集合在每次迭代中的大小越來越小。 – Riju

回答

0

如果你正在運行一個64位的操作系統,它可能與此有關。過去我遇到過這個問題,我們發現的工作是將項目目標設置爲x86(如果可能)。

這裏是一個有答案的帖子,對我正在談論的問題有一個很好的解釋。

VS2008 Debugger does not break on unhandled exception

我要提到我還有看到它在2010年也是如此。

相關問題