我一直在为系统做一些编码,需要在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 :(得分: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。