2015-08-08 106 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