2012-11-08 72 views
2

如果我在4秒之前沒有收到任何東西,我通過一個COM端口發送數據,並以4000間隔開始我的定時器以發回消息。定時器在停止一次後不重新啓動

{負載}

Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    [...]  
    SendCard(0) 
    [...] 
End Sub 

{SendCard子} 我通過設置屬性 「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秒,直到我得到的回報的東西工作正常,但是當我開始了與第二個命令定時器不勾選。

我正在使用.NET 4.0和{Windows.Forms.Timer},我用Timers.Timer嘗試過,並沒有工作,要麼我不明白爲什麼它不會重新開始。

+0

我已經設法使它通過使用System.Timers.Timer工作我想我第一次做錯了什麼。 –

回答

0

它看起來像System.Timers.Timer是我設法讓最好的選擇每次我發送命令後,每4秒觸發一次事件觸發事件。

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 
+0

感謝您通過使用System.Timers.Timer使其工作的答案我想我在第一次不知道的時候做了錯誤。 –

相關問題