日期:2014-05-18  浏览次数:20954 次

c#串口通信假死,求助
我用的是c#自带的serialport控件,在DataRecieved中使用serialport.read(a,0,num);接收数据。num在发送数据时,根据命令返回的字节数确定。
在DataRecieved中serialport.read(a,0,num)后,
用deal()(处理数的子程序)处理的数据。
然后有发送的下一条命令。
发送命令之前,给定num的值。
然后
thread.sleep(100)

即在在DataRecieved中是如下函数:
{
serialport.read(a,0,num);
deal()//处理数据(其中有把接收的数据赋给窗口上的标签,解决线程调用问题简单的用了Control.CheckForIllegalCrossThreadCalls = false;

num=
serialport.write(b,0,n);//比方发送发送n个数
thread.sleep(100)
}
为什么有时候会假死

------解决方案--------------------
thread.sleep(100)导致假死。
要不然用多线程,要不然加上application.doevents()看看
------解决方案--------------------
read阻断了, 要等到有数据才返回,你可以放到线程中read