0
我已經測試了多種方法來關閉所有的MDI子窗體,但它們似乎不穩定。在很多情況下,我會得到ObjectDisposedException
。如何在WinForms MDI環境中正確實現CloseAllForms()?
我試了一下:
'collect copy of app forms array
Dim formsToClose As Form() = My.Application.OpenForms.OfType(Of Form).ToArray()
'iterate over collection, skip special forms
For i As Integer = LBound(formsToClose) + 1 To UBound(formsToClose)
Dim f As Form = formsToClose(i)
If f Is Nothing OrElse frmSpecial.IsMyInstance(f) Then Continue For
Try
clsWinForms.ForceCloseForm(f)
Catch ex As Exception
'some code here
End Try
Next i
ForceCloseForm()
確實Form.Close()
它關閉後表單驗證。
- 這種方法隨機崩潰
ObjectDisposedException
。 - 運行索引從最後到0崩潰的概率更高。來自微軟的
- While-loop-based trick(在live collection上運行,保持索引在成功上不變)也以同樣的方式崩潰。
- 如果我插入測試
f.Disposing
和f.IsDisposed
,沒有任何改善。
如何以穩定的方式關閉所有打開的窗體?
(如果你想給一些代碼片段,您可以選擇C#或VB.NET)