我有一个使用标签的程序调用Valve
和一个名为文本框Variable
多线程毛刺
的要点是,如果Variable = 0
则标签颜色是灰色的, 如果Variable = 1
则标签使用一个线程在灰色和红色之间闪烁。
除非在两个值之间快速切换(输入0然后删除它然后输入1等等),否则它几乎可以完美地工作,然后线程速度会增加(就像它是多线程一样)。
奇怪的是,如果值之间交换0 & 1慢(每2秒+),那么它不会增加闪烁的速度(这是什么程序需要做的)
这是从以下问题展开代码:vb.net multi threading
注意:这只是我的项目在VisiWin.NET上的VB.NET转换。在这个例子中,文本框Variable
将是从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
干杯,我有一种感觉是这个问题。有没有简单的解决方案?或者对于任何其他代码来说,变量切换太快以防止多线程问题? –
@GarethAntonyFowell:我认为肖恩的答案指出要做什么来阻止它。我同意使用Timer而不是Thread。 –
我以前使用过定时器,但是他们证明是有用的,但是我的项目将会太大,我将不得不使用数百个定时器,我想使用线程来创建我自己的属性绑定。正常的计时器不适合我的项目规模。 –