MSCOMM控件有两种方式来读数据,一种就是你说的轮询方式,你只要在轮询代码里加DoEvents,一般不会占用太多资源,简单的代码如下:   ' 保存输入子串的缓冲区
   Dim Instring As String
   ' 使用 COM1。
   MSComm1.CommPort = 1
   ' 9600 波特,无奇偶校验,8 位数据,一个停止位。
   MSComm1.Settings = "9600,N,8,1"
   ' 当输入占用时,
   ' 告诉控件读入整个缓冲区。
   MSComm1.InputLen = 0
   ' 打开端口。
   MSComm1.PortOpen = True
   ' 将 attention 命令送到调制解调器。
   MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保
   ' 调制解调器以"OK"响应。
   ' 等待数据返回到串行端口。
   Do
      DoEvents
   Buffer$ = Buffer$ & MSComm1.Input
   Loop Until InStr(Buffer$, "OK" & vbCRLF)
   ' 从串行端口读 "OK" 响应。   ' 关闭串行端口。
   MSComm1.PortOpen = False第二种方法是中断方式,就是用OnComm 事件来处理,你可以看MSDN帮助!

解决方案 »

  1.   

    这段代码我也在msdn里看到了,我只是想知道如果用中断的方法(就是时间间隔的方法)来实现的代码应该怎样写?谢谢
      

  2.   

    用mscomm的OnComm事件来检测
    mscomm属性设置:
    MSComm1.RThreshold = 1
    MSComm1.RTSEnabled=TRUE如下:Private Sub MSComm1_OnComm()
    Dim rBuf As String
    Dim receva As ByteOn Error GoTo CommErrorSelect Case MSComm1.CommEvent
        Case comEvReceive
            MSComm1.RThreshold = 0
            MSComm1.InputMode = comInputModeBinary
            MSComm1.InputLen = 1
            If MSComm1.InBufferCount >= 1 Then
                If terminal = False Then
                    MSComm1.RThreshold = 0
                    RunTestTimer.Enabled = True
                End If
            End If
          
        Case comEvCD
                  
    End SelectExit SubCommError:
        MSComm1.RThreshold = 1
        Exit Sub
        
    End Sub
      

  3.   

    触发DataArrival事件,举例如下:
    Private Mscomm1_DataArrival(a as integer)
       msgbox a & "消息到"
    end sub
      

  4.   

    用定时器判断mscomm1.InBufferCount 属性