gpt4 book ai didi

vb.net - 如何通过单击按钮来打破循环

转载 作者:行者123 更新时间:2023-12-02 02:55:53 24 4
gpt4 key购买 nike

我正在使用 VB.NET 并且我有:

  • 一个开始按钮
  • 停止按钮
  • 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
  1. 我是否错误地使用了 Application.DoEvents
  2. 除了 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

在调用 DoEvents 之前,Stop_Click 不会有机会被处理,因此,按照您的方式,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

关于vb.net - 如何通过单击按钮来打破循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18338343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com