感觉确实如风吹过所说:
因为VB程序好像很少使用线程,界面UI又是最忌讳失去响应的。所以MSCOMM控件的函数都是非阻塞的。
Do While Len(tmp) < 6
tmp = tmp + Comm.Input
' Debug.Print "tmp="; tmp //这里相当于一个阻塞,不过时间非常短。
n = n + 1
If n >= 3000 Then
Comm.PortOpen = False
Exit Function
End If
Debug.Print
Loop
调试时的debug.print函数相当于给了一个人工阻塞,于是串口IO有了缓冲的机会。建议可以用sleep(X)试试,用它的原因是延时可调,
不像DoEvents可能不能达到debug.print的延时效果。不过最终解决还是建议用事件方式比较好些。
因为VB程序好像很少使用线程,界面UI又是最忌讳失去响应的。所以MSCOMM控件的函数都是非阻塞的。
Do While Len(tmp) < 6
tmp = tmp + Comm.Input
' Debug.Print "tmp="; tmp //这里相当于一个阻塞,不过时间非常短。
n = n + 1
If n >= 3000 Then
Comm.PortOpen = False
Exit Function
End If
Debug.Print
Loop
调试时的debug.print函数相当于给了一个人工阻塞,于是串口IO有了缓冲的机会。建议可以用sleep(X)试试,用它的原因是延时可调,
不像DoEvents可能不能达到debug.print的延时效果。不过最终解决还是建议用事件方式比较好些。
举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。