VB.NET - 中断表单循环和结束表单

Phi*_*hil 60 vb.net user-interface winforms

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

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

frmMain.Close()
frmMain.Dispose()
Run Code Online (Sandbox Code Playgroud)

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

小智 84

执行此操作的"正确"方法实际上是后台工作线程.但是这也可以在不需要后台工作线程的情况下工作.

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

Private keepLoopAlive As Boolean
Run Code Online (Sandbox Code Playgroud)

然后编写您的处理循环,如下所示:

keepLoopAlive = True

Do While keepLoopAlive 

    (your code that loops here)

    DoEvents

Loop
Run Code Online (Sandbox Code Playgroud)

然后在你的Close事件上做:

keepLoopAlive = False
Me.Close()
Run Code Online (Sandbox Code Playgroud)

这将导致循环首先获得结束,并且表单应该关闭.

请注意我已经从内存中编写了这段代码,而不是在IDE中编写代码,因此可能存在拼写错误.

  • 对于所有Google员工:请记住,正确的方法是使用后台工作程序. (46认同)
  • 此外,请注意,Microsoft在文档中提醒说,使用"DoEvents"会导致难以检测到错误,而最好使用多线程.http://msdn.microsoft.com/en-us/library/system.windows.forms.application.doevents.aspx (25认同)

小智 12

我不是.NET开发人员所以这可能不是有效的,但如果我执行无限循环,我会在每次启动时检查循环是否仍然有效,具有某种布尔值,如果失败,则删除跳出循环.

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