程序停留等待的问题
这个问题已经困扰我差不多一个月都解决不了,希望大家一起讨论讨论,所以在VB和都发帖寻求大家帮助!我用的是serialport这个控件,类似于MSComm这个控件。
问题:
按下按键test之后,发送 ATE0回车 收到OK之后 发送AT回车 收到OK之后 发送AT+CSQ回车 收到OK之后结束。
先贴上接收的函数:
程序代码:
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As ) Handles SerialPort1.DataReceived strReceive = String.Empty strReceive = SerialPort1.ReadExisting.ToString End SubstrReceive这个是接收的字符串(全局变量)
这段函数没有问题,我测试过能接收到一串字符串,而不是单个字符,希望大家放心。
这个按键的功能就是这样。
首先使用SerialPort1.Write("ATE0" & vbCrLf)给串口发送数据
如果是在单片机里面编程等待收到OK是这样吧!
while(当收到数据不等于OK); //等收到数据等于OK就退出循环
如果在VB使用这种方法那么程序会出现卡死状态(未响应)
然后我我就想使用两个线程解决这个问题!
但是又遇到了麻烦。
首先贴上判断接收到的函数:
程序代码:
Private Sub Hand(ByVal dat As Object) While Regex.IsMatch(strReceive, "OK") = False Thread.Sleep(1000) End While Select Case dat Case "test" ThreadTest.Resume() Case "start" ThreadStart.Resume() Case "send" ThreadSend.Resume() End Select ThreadHand.Abort() End Sub当收到OK之后推出循环,恢复原来的线程
下面这里就是我按下test之后启动的函数,也是当线程处理:
程序代码:
Private Sub Test() SerialPort1.Write("ATE0" & vbCrLf) ThreadHand.Start("test") ThreadTest.Suspend() SerialPort1.Write("AT" & vbCrLf) ThreadHand.Start("test") ThreadTest.Suspend() SerialPort1.Write("AT+CSQ" & vbCrLf) ThreadHand.Start("test") ThreadTest.Suspend() End Sub同过这些函数其实意思很明了,就是 发送数据-等待接收-挂起本线程-接收OK后恢复线程-继续发送。。。
但是结果就是实现不了,希望大家帮帮我。