【问题标题】:vb.net - Stop loop when I press Buttonvb.net - 当我按下按钮时停止循环
【发布时间】:2016-05-03 09:36:06
【问题描述】:

我有一个循环(在另一个类中)我想在按下按钮时停止,但我不知道该怎么做

这是我的代码:

'My FORM

Dim blStop = False

Private Sub btnFilter_Click(sender As Object, e As EventArgs) Handles btnFilter.Click
        AnotherClass.doTheLoop(blStop)
End Sub

Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click
        blStop = True
End Sub



'AnotherClass Loop

While (blStop = False)
    'blablabla
End While

【问题讨论】:

  • 声明 blStop 的行是什么?此外,您的AnotherClass 定义不应包含参数blstop。您在类中的代码会将其视为局部变量,而不是在类外定义的变量。
  • 您可能也应该将 blstop 声明为静态
  • @MattWilko 这是代码:Public Sub doTheLoop(blStop as Boolean) While (blStop = False) 'blablabla End While End Sub
  • @DavidWilson 我正在尝试不使用静态
  • Ok 添加一个布尔属性到您的另一个名为 Cancel Set 的类中,在您的按钮中单击并在循环中处理它。

标签: vb.net loops


【解决方案1】:

你的问题是这样的:

Public Sub doTheLoop(blStop as Boolean) 
    While (blStop = False) 
       'blablabla 
    End While 
End Sub

blStop 的声明,创建了一个新变量,所以当你将值设置为 False 时,你只设置了本地贴花的那个。

一个快速而肮脏的解决方法是声明布尔值ByRef - 这意味着它仍将引用原始变量。

Public Sub doTheLoop(ByRef blStop as Boolean) 
    While (blStop = False) 
       'blablabla 
    End While 
End Sub

一个更好的解决方案是在你的类中有一个方法,当你想停止而不是传递循环变量时调用它。

【讨论】:

  • 该循环永远不会停止,因为它是由 UI 线程调用的... UI 将冻结直到循环结束,因此用户将永远无法按下按钮停止循环...
  • @SuperPeanut - 取决于 'blablabla 中的内容
【解决方案2】:

你的其他类应该是这样的:

Public class AnotherClass
    Private Shared blStop As Boolean = False

    'blablabla

    Public Shared Sub doTheLoop()
        While Not blStop
            'blablabla
        End While
    End Sub

    Public Shared Sub StopTheLoop()
        blStop = True
    End Sub

    'blablabla
End Class

然后你可以这样调用这个循环:

'Form class
Private Sub btnFilter_Click(sender As Object, e As EventArgs) Handles btnFilter.Click
    'You must run the loop on another thread or you will block the UI thread. 
    'Therefore your application will 'Stop Responding'
    System.Threading.Thread.QueueWorkUserItem(AddressOf(AnotherClass.DoTheLoop))
End Sub

Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click
    AnotherClass.StopTheLoop()
End Sub

【讨论】:

    猜你喜欢
    • 2012-07-14
    • 2020-06-01
    • 2018-03-20
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    相关资源
    最近更新 更多