use*_*279 4 vb.net loops click button break
我正在使用 VB.NET,我有:
Start按钮Stop按钮While循环当Start按下按钮时,While循环开始。我想在Stop按下按钮时停止循环。
我曾尝试使用Applications.DoEvents,但当Stop按下按钮两次时循环停止。
下面是我的代码使用 Applications.DoEvents
Dim stopclick As Boolean = False
Private Sub btnPlay_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPlay.Click
btnForward.Enabled = False
btnStop.Enabled = True
While
' Perform the while statements
If stopclick = True Then
stopclick = False
Application.DoEvents()
Exit While
End If
End While
End Sub
Private Sub btnStop_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnStop.Click
stopClick = True
End Sub
Run Code Online (Sandbox Code Playgroud)
Application.DoEvents错了吗?Application.DoEvents?如何通过Stop单击按钮停止循环?您需要将调用放在语句Application.DoEvents之外If,如下所示:
While True
Application.DoEvents()
' Perform the while statements
If stopclick Then
stopclick = False
Exit While
End If
End While
Run Code Online (Sandbox Code Playgroud)
在Stop_Click您调用 之前不会有机会被处理DoEvents,因此,按照您的方式,stopClick永远不会设置为True。
然而,这里更大的问题是,调用DoEvents是非常糟糕的做法,如果您不小心,可能会导致一些非常难以修复的错误。如果在后台线程中执行循环会好得多。查看BackgroundWorker组件以获取易于实现的 WinForm 项目线程机制。您可以在表单设计器的工具箱中找到它。
以下是如何使用BackgroundWorker组件执行此操作的示例:
Dim stopclick As Boolean = False
Private Sub btnPlay_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPlay.Click
btnForward.Enabled = False
btnStop.Enabled = True
BackgroundWorker1.RunWorkerAsync()
End Sub
Private Sub btnStop_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnStop.Click
stopClick = True
End Sub
Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
stopClick = False
While Not stopClick
' Perform the while statements
End While
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
btnForward.Enabled = True
btnStop.Enabled = False
End Sub
Run Code Online (Sandbox Code Playgroud)