0

我一直在为系统编写一些代码,并且需要在 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
4

2 回答 2

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
于 2013-02-07T15:13:59.620 回答
0

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

因此,您可以在另一个操作中取消线程,也可以仅在第一次启动线程后将 _flash 设置为 true 和 false。

于 2013-02-07T15:15:41.743 回答