我有一个程序,它使用一个名为的标签Valve
和一个名为的文本框Variable
要点是,如果Variable = 0
则标签颜色为灰色,如果Variable = 1
则标签使用在灰色和红色之间闪烁的线程。
除了非常快速地在两个值之间更改(输入 0 然后删除它然后输入 1 等等)之外,这几乎可以完美地工作,然后线程速度会增加(就像它是多线程一样)。
奇怪的是,如果在值 0 和 1 之间缓慢交换(每 2 秒 +),那么它不会增加闪烁速度(这是程序需要做的)
这是来自以下问题的扩展代码:vb.net multi threading
注意:这只是我在 VisiWin.NET 上的项目的 VB.NET 转换。在此示例中,TextBoxVariable
将是从 PLC 读取的实际变量,标签Valve
将是三角形,表示来自过程流程图模拟的过程螺线管。每个螺线管将由不同的变量控制。
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Threading
Imports System.Diagnostics
Public Class Form1
Private _flash As Boolean = False
Private Sub Variable1_TextChanged(sender As System.Object, e As System.EventArgs) Handles Variable.TextChanged
If Variable.Text = "1" And Not _flash Then
_flash = True
Dim FlashThread As New Thread(New ThreadStart(AddressOf FlashLabel))
FlashThread.Start()
End If
If Variable.Text = "0" Then
_flash = False
Valve.ForeColor = Color.Gray
End If
End Sub
Private Sub FlashLabel()
Dim _Color As Color = Color.Gray
While _flash
If Valve.ForeColor = _Color Then
Valve.ForeColor = Color.Red
Else
Valve.ForeColor = Color.Gray
End If
System.Threading.Thread.Sleep(2000)
End While
End Sub
End Class