一个oncomm事件问题
我想实现,发一个命令,就接受一个数据
Private Sub Command2_Click()
    Dim A As String
     MSComm1.Output = "!0R" & Chr$(13)
     Delay_Time (100)
     A = MSComm1.Input
     Debug.Print A
End Sub
这样写代码可以实现我的要求,可是如果换成OnComm()事件,就不行了(执行次数太多了)。
我不清楚如果不用oncomm事件是否有什么弊端oncomm事件代码如下
Private Sub MSComm1_OnComm()
  Select Case MSComm1.CommEvent
  Case comEvReceive
       Call Delay_Time(100)
       Dim Buffer As Variant
       Buffer = MSComm1.Input
       Debug.Print "接收 - " & Buffer
       Text1.Text = Buffer
  End Select
End Sub
事件执行的次数太多了

解决方案 »

  1.   

    MSComm1.InputLen = 0 
    MSComm1.InBufferSize = 44
     MSComm1.OutBufferSize = 44
    设置了
      

  2.   

    MSComm1.CommPort = 1
      MSComm1.InputMode = comInputModeText
      MSComm1.DTREnable = True
      MSComm1.Handshaking = Handshaking
      MSComm1.Settings = "9600,n,8,1"
      MSComm1.InputLen = 0
      MSComm1.InBufferSize = 44
      MSComm1.OutBufferSize = 44
      MSComm1.PortOpen = True
      MSComm1.RThreshold = 1是否根延时有关系阿
    我单步调试,显示的结果是对的,如果去掉单步调试,就接收近来很多没用的东西(空值)
      

  3.   

    我不清楚如果不用oncomm事件是否有什么弊端
      

  4.   

    设置RThreshold=1为每字节触发,数据定长的话将它设置成定长触发
      

  5.   

    jlctt(金)
    设置RThreshold=1为每字节触发,数据定长的话将它设置成定长触发
     接受的数据是定长的,该怎么设置
      

  6.   

    如长度为12设mscomm1.RThreshold=12即可
    啸峰工作室http://www.gjwtech.com/serialcomm.htm
    要学会用搜索引擎http://www.google.com,http://www.baidu.com等,许多问题网上有现成的答案
      

  7.   

    看了你的帖子,但没有明白你的问题是什么?你所谓的执行次数太多是什么意思?oncomm事件多次被调用?你在后面怀疑是延时的问题,这也有可能,不过根据我以前的经验,如果你的通信协议订的比较完整的话,是无需担心延时的问题,完全可以省略调延时。
    详细的恐怕要周末在说了,不过你可以尽量的加大延时看看,还有在延时的函数的循环当中,一定要加入doevents,如:
    private sub Delay_Time(byval HowLong as Long)
     dim t1 as single
     dim t2 as single
     t1=timer()
     t2=timer
     while not (t2-t1)*1000#>=Howlong
      doevents:doevents:doevents
      t2=timer()
     wend
    end sub
    另外对于oncomm事件,建议改为下面的样子:
    private ...._oncomm()
     static blnInProcess
     dim ... if blnInprocess then exit sub
      blnInprocess=true  ....
      ....
     end if blnInProcess
    end sub
    以上的意思就是放置oncomm事件的重入,虽然我不记得oncomm是否会产生重入的现象,当时有备无患吧。
    再提一句,前面的延时函数我没有经过调试,你自己调一下吧。