2013-02-07 87 views
0

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

回答

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 
0

你永远不取消原来的线程,所以当你按一下按钮,你现在有第二次两个线程正在运行并导致闪烁发生。

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