用MSComm2_OnComm 事件 接收到的字符长度一般都不确定甚至有时接收不到字符 应该用查询方式

解决方案 »

  1.   

    MSComm2.InBufferCount = 1024
      

  2.   

    Private Sub MSComm2_OnComm()
    Dim buffer As String
    Select Case MSComm2.CommEvent
    Case comEvCD
    Case comEvCTS
    Case comEvDSR
    Case comEvRing
    Case comEvReceiveMSComm2.InBufferCount = 1024
    buffer = MSComm2.Input
    Text2.Text = buffer
    Case comEvSendEnd Select
    MSComm1.PortOpen = False
    MSComm2.PortOpen = False
    End Sub
      

  3.   

    MSComm2.InBufferCount = 1024
    这个方法不行的
      

  4.   

    RThreshold属性
    在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。
    当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。
    例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件
      

  5.   


    MSComm2.CommPort = 2
    MSComm2.Settings = "9600,n,8,1"
    MSComm2.PortOpen = True
    MSComm2.RThreshold = 1
    ~~~~~~~~~~~~~~~~~~~~~~~我写了这个语句的!
      

  6.   

    设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件;
    实际上我建议使用OnComm来接收数据,必须自己设置一个缓冲区,把每次受到的数据追加到缓冲区里,直到受到一段完整的数据(对于你的程序,可能使一个自定义的桢)在对其处理
      

  7.   

    RThreshold要设的大一点
    正如gcj123所说的它控制的是缓冲区收到信号后触发OnComm事件发生的频率,你设为1是8位一收
    还有初始化时InBufferSize也要设一下
      

  8.   

    非常感谢你们的回答:
    你的意思是不是说当RThreshold=1是,就可以接受8个字节,当RThreshold=2
    就可以接受16个字节!---
    我把RThreshold给改大了,就可以传比较多的数据,可以也不能全不传完!我的
    inbuffersize是有的默认值1024!
    其中有什么原因吗》?
      

  9.   

    gcj123你的想法能在实际一点吗?我的底子不好?可以举例说明吗?
    1。怎么把接收到的东西追加到一起,不是一起发过了的吗?
    2》自己的帧应该这样定义!最好有例子!
    谢谢?