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集合被修改,這讓我感到很驚訝。有人可以告訴我爲什麼它不會拋出異常?
然而,它拋出了「集合被修改;枚舉操作可能不會執行」在客戶端系統中。
聽起來好像集合在您的測試環境中未被修改。現場環境的修復將首先將表單添加到單獨的列表中,並在關閉它們的列表上循環。 – JonAlb
MdiChildren返回*數組*,而不是集合。您不會接近診斷用戶的崩潰。 –
@JonAlb:我不認爲是這種情況,我使用了斷點並驗證了子表單集合在每次迭代中的大小越來越小。 – Riju