在关闭表单()vb.net之前检查createHandler()

在关闭表单()vb.net之前检查createHandler(),vb.net,forms,winforms,Vb.net,Forms,Winforms,我当前在关闭windows窗体应用程序时遇到问题。 我在一个主窗体中有多个窗体。如果在主窗体中的一个窗体仍在初始化时关闭主窗体,应用程序将在close()上崩溃,因为createHandler()仍在运行 我已经在其中一个子表单中解决了这个问题,将布尔值添加到Load()并检查布尔值是否为true。例如: Private Sub frm_Load(sender As Object, e As EventArgs) Handles MyBase.Load ini = True // l

我当前在关闭windows窗体应用程序时遇到问题。 我在一个主窗体中有多个窗体。如果在主窗体中的一个窗体仍在初始化时关闭主窗体,应用程序将在close()上崩溃,因为createHandler()仍在运行

我已经在其中一个子表单中解决了这个问题,将布尔值添加到Load()并检查布尔值是否为true。例如:

Private Sub frm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
   ini = True
   // loading components etc.
   ini = False
End Sub

Private Sub frm_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
If e.KeyData = Keys.Escape Then
      If (not ini)
          Close()
      End If
End If
现在我有一个主要的问题

 Dim Childs = (From rec In Me.MdiChildren).ToList
 For Each Child In Childs
     Child.Close()
 Next
在我关闭子窗体之前,是否需要验证子窗体是否已初始化?
类似于:Child.IsInit()

将变量ini公开,以便可以从主窗体访问它。在for循环(主窗体)中,您可以检查孩子的ini是真是假,并相应地执行操作。别忘了什么都不检查以避免任何异常。有什么默认方法可以做到这一点吗?为了解决这个问题,有超过100多张表格我必须公开发表。一点欺骗或黑客也可以解决问题。我现在唯一的解决办法就是试着抓住它,这样它就不会关闭。但是,如果这些表单中的任何一个卡在Load()中,这将导致一个无休止的循环。因此,寻找一个更好的解决方案,以避免未来的问题。我想不出任何黑客。若您选择try-catch,那个么您可以使用计数器在child中迭代表单。这不会导致无限循环,但是是的,很少有子窗体不会关闭,然后您可以添加睡眠或计时器来尝试关闭左侧窗体。或者,您可以尝试在100个子表单中声明公共ini。使用一些工具或编写自己的代码将“End Class”替换为“Public ini as Boolean newLineChar End Class”。使用ini=False/ini=True更新frm_Load时可以使用相同的技巧。谢谢,我现在将继续使用try catch,直到找到另一个选项。