vb.net多线程

时间:2013-02-07 15:08:34

标签: vb.net

我一直在为系统做一些编码,需要在VB.NET中使用线程而不是普通的定时器。

它工作正常,但问题在于眨眼时间,当点击按钮然后它按预期闪烁,如果在测试中点击多次,则闪烁时间大致乘以原始睡眠线程时间(750ms) ,每次点击都会继续发生这种情况。

我该怎么做才能使眨眼不加速?以下是代码!

    Private _flash As Boolean = False

    Private Sub btnButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnButton1.Click
        _flash = True
        Dim FlashThread As New Thread(New ThreadStart(AddressOf FlashLabel))
        FlashThread.Start()

    End Sub

    Private Sub FlashLabel()

        Dim _color As Color = Color.Gray    

        While _flash

              If label1.ForeColor.Equals(_color) Then
                    label1.ForeColor = Color.Red
              Else
                    label1.ForeColor = Color.Gray

              System.Threading.Thread.Sleep(750)

        End While
    End Sub

2 个答案:

答案 0 :(得分:0)

每次单击按钮时,您都会开始一个新线程,所以如果单击该按钮两次,它将启动两个线程,这两个线程都以750毫秒的间隔切换颜色,因此看起来好像有一个线程做得快两倍。解决这个问题的一个简单方法是,如果已设置_flash标志,则只需跳过启动新线程,例如:

Private Sub btnButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnButton1.Click
    If Not _flash Then
        _flash = True
        Dim FlashThread As New Thread(New ThreadStart(AddressOf FlashLabel))
        FlashThread.Start()
    End If
End Sub

答案 1 :(得分:0)

您永远不会取消原始线程,因此当您再次单击该按钮时,您现在有两个线程正在运行并导致闪烁发生。

所以你可以在另一个动作中取消线程,或者只在第一次启动线程,然后将_flash设置为true和false。