我有一個使用標籤的程序調用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。 –
我以前使用過定時器,但是他們證明是有用的,但是我的項目將會太大,我將不得不使用數百個定時器,我想使用線程來創建我自己的屬性綁定。正常的計時器不適合我的項目規模。 –