2015-08-08 61 views
0

我正在處理可以發送和接收某些命令的serialport。我想實現一個重試功能,它允許我(客戶端)重新發送數據,直到設備(服務器)收到並向我發送響應。觸發richtextbox textchanged事件,直到它檢測到某些文本

因此,我創建了一個簡單的代碼,可以說明這種功能。

Public Class Form1 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     RichTextBox1.AppendText(Environment.NewLine & "Sample") 
    End Sub 

    Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged 
     Console.WriteLine("Trigger textchanged") 

     Dim totalLines As Integer = Me.RichTextBox1.Lines.Length 
     Dim lastLine As String = Me.RichTextBox1.Lines(totalLines - 1) 

     Dim CSTAT_Check As Boolean = lastLine Like "*Sample*" 
     If CSTAT_Check = True Then 
      RichTextBox1.AppendText(Environment.NewLine & "Sample") 
     End If 
    End Sub 
End Class 

它的工作方式是這樣的,我會點擊該按鈕,將sample字符串追加到richtextbox那麼richtextboxtextchange_event將被觸發導致它的sample串重發到本身和意願,它會導致trigger另一個textchange_event依此類推,直到設備收到sample字符串,返回設備(服務器)將發送sample_accepted字符串到我的設備(客戶端),並且因爲textchanged_event沒有檢測到richtextbox最後一行中的sample字符串它不會lo nger發送另一個sample字符串到richtextbox

這是很難理解,所以我將創建一個簡單的圖

客戶端(我)                                     服務器(設備)

發送sample串                    Doesn't detected

發送sampleagain         Doesn't detectedagain

發送sampleagain         Doesn't detectedagain

發送sampleagain         Doesn't detectedagain

發送sample ST環again         Detectedsamplesendsample_accepted

客戶端將no longer因爲服務器檢測到已發送sample字符串。

我的代碼中的問題是它似乎不會在第一次觸發後再次觸發textchanged_event

+0

請問您可以發佈您正在進行的實際串行端口調用的接口嗎?還有你用來調用串口的代碼?這個富文本框的例子正在阻礙你獲得一個很好的答案。 – Enigmativity

+0

@Enigmativity,當然。我會盡量以最簡單的形式重新創建它。 –

回答

0

??? 如果更改響應該屬性更改的代碼內的屬性,另一個更改的事件將不會觸發。 ???進行更改後,您需要手動觸發textchanged事件。

Public Class Form1 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     RichTextBox1.AppendText(Environment.NewLine & "Sample") 
    End Sub 

    Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged 
     Console.WriteLine("Trigger textchanged") 

     Dim totalLines As Integer = Me.RichTextBox1.Lines.Length 
     Dim lastLine As String = Me.RichTextBox1.Lines(totalLines - 1) 

     Dim CSTAT_Check As Boolean = lastLine Like "*Sample*" 
     If CSTAT_Check = True Then 
      RichTextBox1.AppendText(Environment.NewLine & "Sample") 
      RichTextBox1_TextChanged(sender, New EventArgs()) 
     End If 
    End Sub 
End Class 
+0

添加2行代碼後出現錯誤。 ** 1。**'錯誤'公共事件TextChanged(sender As Object,e As System.EventArgs)'是一個事件,不能直接調用。使用'RaiseEvent'語句來引發一個事件。'然後** 2。**'錯誤'Handled'不是'System.EventArgs'的成員。' –

+0

對不起,在這裏的C#dev。我有時會忘記,儘管有相似之處,但並不是所有的東西都精確地映射到不同的。我編輯過。 – weirdev

+1

@CaryBondoc PS - 我擔心這會造成無限循環。我不確定這是否適合處理客戶端 - 服務器重試。 – weirdev

相關問題