【问题标题】:VB.NET - Interrupt form loop and end formVB.NET - 中断形式循环和结束形式
【发布时间】:2011-06-13 23:02:42
【问题描述】:

我有一个表单,它通过无限循环并处理数据。当我单击“关闭”表单的按钮时,即使已关闭,表单也会继续处理。我希望表单完全结束并退出其循环语句,然后打开一个新表单。

这是我用来关闭表单的代码

frmMain.Close()
frmMain.Dispose()

注意:我没有使用线程,它只是一个简单的VB.NET 应用程序。我没有关闭主启动窗体。

【问题讨论】:

    标签: vb.net winforms user-interface


    【解决方案1】:

    真正的“正确”方法是使用后台工作线程。但这也可以在不需要后台工作线程的情况下工作。

    在表单类中声明一个变量。

    Private keepLoopAlive As Boolean
    

    然后将您的处理循环编写为:

    keepLoopAlive = True
    
    Do While keepLoopAlive 
    
        (your code that loops here)
    
        DoEvents
    
    Loop
    

    然后在您的 Close 事件中执行以下操作:

    keepLoopAlive = False
    Me.Close()
    

    这将导致循环在第一时间结束,并且您的表单应该关闭。

    请注意,我是从内存中编写此代码,而不是在 IDE 中,因此可能存在拼写错误。

    【讨论】:

    • 谢谢!我结束了将其实施到我的程序中,并且效果很好!我最初是在问我是否可以在不必专门退出循环的情况下突然结束表单过程,但听起来这是不可能的。
    • 您可以在不终止循环的情况下结束进程。 .Net 中至少有三种简单的方法:将线程上的“IsBackground”设置为“true”,然后终止所有前台线程,或者调用 Environment.FailFast() 或 Environment.Exit()。
    • 所有 Google 员工:请记住,正确的方法是使用后台工作器。
    • 另外,请注意 Microsoft 在文档中警告说,使用 DoEvents 可能会导致难以检测到错误,因此最好使用多线程。 msdn.microsoft.com/en-us/library/…
    【解决方案2】:

    我不是.NET 开发人员,所以这可能无效,但如果我正在执行一个无限循环,我会在每次启动时检查循环是否仍然有效,并具有某种布尔值,如果它失败了,退出循环。

    当您关闭表单时,将布尔值设置为 false,它将退出,您可以有一个等待并重新启动循环的外部循环,或者您可以在其他时间重新启动整个函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多