记得书本上说只要将RThreshold值设置为0,就不能引发OnComm事件了,可当我运行程序时为什么还是会
引发OnComm事件呢?请问有什么办法不让OnComm事件发生,我遍的程序中有两个函数,其中一个需要引发
OnComm事件,另一个不需要,可是在运行时都会引发OnComm事件,不知如何解决!
引发OnComm事件呢?请问有什么办法不让OnComm事件发生,我遍的程序中有两个函数,其中一个需要引发
OnComm事件,另一个不需要,可是在运行时都会引发OnComm事件,不知如何解决!
无论何时当 CommEvent 属性的值变化时,就产生 OnComm 事件,标志发生了一个通讯事件或一个错误。
语法
Private Sub object_OnComm ()
OnComm 事件语法包括下列部分:
部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
说明
CommEvent 属性包含实际错误或产生 OnComm 事件的数码。注意,设置 Rthreshold 或 Sthreshold 属性为 0,分别使捕获 comEvReceive 和 comEvSend 事件无效。
除了comEvReceive 和 comEvSend 事件外还有其它事件.
OnComm 常数
常数 值 描述
comEvSend 1 发送事件。
comEvReceive 2 接收事件。
comEvCTS 3 clear-to-send 线变化。
comEvDSR 4 data-set ready 线变化。
comEvCD 5 carrier detect 线变化。
comEvRing 6 振铃检测。
comEvEOF 7 文件结束。LZ,请贴出你的代码.
我会看到Label1中显示了"正在接收数据...",同时Text1的文本框中也显示了接收的字符,这是为什么了呢?
Private Sub Comm1_OnComm()
Label1.Caption = " 正在接收数据..."
Label1.Refresh
Comm1.RThreshold = 0
Dim slen%, j%, msgvalue%
Dim tmp As Variant
Select Case Comm1.CommEvent
Case comEvReceive
slen = Comm1.InBufferCount
Comm1.InputLen = slen
ReDim bytInput(slen)
tmp = Comm1.Input
bytInput = tmp
receivedata
strData = ""
bytInput = ""
End Select
Comm1.RThreshold = 1
End Subreceivedata是一个处理并显示接收数据的函数,接收是以二进制形式进行的
Label1.Caption = " 正在接收数据..."
Label1.Refresh
Comm1.RThreshold = 0
Dim slen%, j%, msgvalue%
Dim tmp As Variant
Select Case Comm1.CommEvent
Case comEvReceive
slen = Comm1.InBufferCount
Comm1.InputLen = slen
ReDim bytInput(slen)
tmp = Comm1.Input
bytInput = tmp
receivedata
strData = ""
bytInput = ""
End Select
Comm1.RThreshold = 1
End Sub
LZ,你以下4句代码
Label1.Caption = " 正在接收数据..."
Label1.Refresh
Comm1.RThreshold = 0
Comm1.RThreshold = 1
均在
Select Case Comm1.CommEventEnd Select
外
而在
Private Sub Comm1_OnComm()End Sub
内
那就是说,只要串口有其它事件,如
comEvCTS 3 clear-to-send 线变化。
comEvDSR 4 data-set ready 线变化。
comEvCD 5 carrier detect 线变化。
等,
Comm1.RThreshold = 1
接下来就发生
comEvReceive 2 接收事件。
Comm1.DTREnable = False开始接收
Comm1.DTREnable = True
另外,能否按3楼的说法将Comm1.RThreshold = 0 和 Comm1.RThreshold = 1
放到Select Case 内(如红色代码所示),这样是否在事先设置Comm1.RThreshold = 1
后才能引发接收事件呢?
Private Sub Comm1_OnComm()
Label1.Caption = " 正在接收数据..."
Label1.Refresh
Dim slen%, j%, msgvalue%
Dim tmp As Variant
Select Case Comm1.CommEvent
Case comEvReceive
Comm1.RThreshold = 0
slen = Comm1.InBufferCount
Comm1.InputLen = slen
ReDim bytInput(slen)
tmp = Comm1.Input
bytInput = tmp
receivedata
strData = ""
bytInput = ""
Comm1.RThreshold = 1 End Select
End Sub
我在同一个FORM窗口中编写了一个发送数据的程序和一个接收数据的程序,运行发送程序时使用软件
握手,并通过自己编写的LOOP循环读取输入缓冲区中的控制码来控制是否继续发送.
接收数据的程序是通过OnComm() 事件来自动接收缓冲区中的数据,在调试中就发现发送程序和接收
程序之间互相有干扰,运行发送程序时总是会产生OnComm() 事件,而导致我的LOOP循环无法读取到
缓冲区中的数据(OnComm() 事件中的接收事件好象抢先一步把缓冲区中的数据读走了)
因此我想求教如何在运行发送程序功能时,不使OnComm() 事件中的接收事件有效,还请帮忙!