程序停留等待的问题
这个问题已经困扰我差不多一个月都解决不了,希望大家一起讨论讨论,所以在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 Sub
strReceive这个是接收的字符串(全局变量)
这段函数没有问题,我测试过能接收到一串字符串,而不是单个字符,希望大家放心。
这个按键的功能就是这样。
首先使用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后恢复线程-继续发送。。。
但是结果就是实现不了,希望大家帮帮我。