我通过COM端口发送数据并以4000间隔启动我的计时器,如果我在4秒之前没有收到任何信息,则发回我的信息。
{负载}
Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
[...]
SendCard(0)
[...]
End Sub
{SendCard Sub} 我通过设置属性“LastCommand”通过该Sub发送需求信息,该属性通过端口发送数据。
Private Sub SendCard(ByVal cardIndex As Integer)
If cardIndex < Setting.Machine.Cards.Length Then
'Calling LastCommand's Set()
LastCommand = "*" & Setting.Machine.Cards(cardIndex) & ": STRQ" & ControlChars.CrLf
Else
'Blah blah...
End If
End Sub
该属性发送数据并启动Timer。
Public Property LastCommand() As String
Get
Return lastCommandString
End Get
Set(ByVal value As String)
lastCommandString = value
MainCOMSerialPort.Write(value)
ResponseTimer.Start()
End Set
End Property
当我收到回答时,我会停止计时器,然后询问下一张卡的信息。
Private Sub MainCOMSerialPort_DataReceived(...)
[...]
ResponseTimer.Stop() 'After this stop it does not trigger the Tick event any longer.
SendCard(Array.IndexOf(Setting.Machine.Cards, CardString) + 1) 'Sending the next card
[...]
End Sub
tick事件适用于第一张卡
Private Sub ResponseTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ResponseTimer.Tick
'MessageBox.Show("No Respone Yet")
LastCommand = LastCommand
End Sub
所以它每隔4秒就会询问我的第一个命令,直到得到回报,但是当我从第二个命令开始时,Timer不会打勾。
我正在使用.NET 4.0和{Windows.Forms.Timer},我尝试使用Timers.Timer并且无法工作,或者我不明白为什么它不会再次启动。
答案 0 :(得分:0)
在属性'LastCommand'中,检查值不等于lastCommandString,如果没有启用ResponseTimer,也许它会有所帮助:
Public Property LastCommand() As String
Get
Return lastCommandString
End Get
Set(ByVal value As String)
if value = lastCommandString then exit property
lastCommandString = value
MainCOMSerialPort.Write(value)
if Not ResponseTimer.Enabled Then ResponseTimer.Start()
End Set
End Property
答案 1 :(得分:0)
看起来System.Timers.Timer是我每次发送命令后每隔4秒设置一次elapse事件触发器的最佳选项。