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
プロパティはデータを送信し、タイマーを開始します。
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秒ごとに最初のコマンドを要求していますが、2番目のコマンドでやり直すと、タイマーは作動しません。
.NET 4.0 と {Windows.Forms.Timer} を使用しています。Timers.Timer を試してみましたが、動作しませんでした。なぜ再起動しないのかわかりません。