下面是我的实验的完整代码:Dim flag As Integer'显示oncomm事件激发了多少次。
Private Sub cmdFlag_Click()
  MsgBox Str(flag)
End Sub’发送文本框
Private Sub cmdSend_Click()
  MSComm1.Output = Text1.Text
  flag = 0
End SubPrivate Sub Form_Load()
  MSComm1.PortOpen = True
End Sub'text2为接收文本框。
Private Sub MSComm1_OnComm()
  Text2.Text = MSComm1.Input
  flag = flag + 1
End Submscomm的配置:RThresHold:1;字符形式。
我以前以为接收缓冲区有一个字符就触发oncomm事件,但是我发送了"a",接收正确为"a",但是却发现flag变成了5,请问这是怎么回事情?

解决方案 »

  1.   

    Private Sub MSComm1_OnComm()
        Select Case MSComm1.CommEvent
            Case comEventBreak '收到中断讯号
            Case comEventCDTO '
            Case comEventCTSTO
            Case comEventDSRTO
            Case comEventFrame
            Case comEventOverrun '数据遗失
            Case comEventRxOver '接收缓冲区漫溢
            Case comEventRxParity '极性错误
            Case comEventTxFull '传送缓冲区漫溢
            Case comEventDCB '未预期错误
            Case comEvCD
            Case comEvCTS
            Case comEvDSR
            Case comEvRing
            Case comEvReceive '收到字符
    'put at here
            Case comEvSend
            Case comEvEOF
        End Select
    End Suboncomm事件有很多种的
      

  2.   

    Private Sub MSComm1_OnComm()
        Select Case MSComm1.CommEvent
            Case comEventBreak '收到中断讯号
            Case comEventCDTO '
            Case comEventCTSTO
            Case comEventDSRTO
            Case comEventFrame
            Case comEventOverrun '数据遗失
            Case comEventRxOver '接收缓冲区漫溢
            Case comEventRxParity '极性错误
            Case comEventTxFull '传送缓冲区漫溢
            Case comEventDCB '未预期错误
            Case comEvCD
            Case comEvCTS
            Case comEvDSR
            Case comEvRing
            Case comEvReceive '收到字符
    'put at here
            Case comEvSend
            Case comEvEOF
        End Select
    End Suboncomm事件有很多种的
      

  3.   

    你好:
    1:如果mscomm的RThresHold设置为0,那么当计算机串口接受缓冲区收到字符以后,是不会触发mscomm的OnComm()事件的,你的RThresHold设置为1,那么当然就触发了啊,至于说flag变成5,我也不大清楚,可能跟系统有关吧!
    2:理论上说:设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。。但实际上OnComm事件并不是每收到一个字符便触发一次 OnComm 事件。OnComm事件是在缓冲区收到几个甚至几十个字节数据后才被触发的。这可能与操作系统的多任务不能很好地响应有关,这里的问题其实不大,与我们写程序没什么关系!
    3:这与接收和发送缓冲区大小有关。接收缓冲区越大则应用程序可用内存越小。但若接受缓冲区太小,若不使用握手协议, 就可能有溢出的危险。一般的规律是,首先设置一个 1024 字节的缓冲区。如果出现溢出错误,则通过增加缓冲区
    的大小来控制应用程序的传输速率