代码:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
.
.
.
ComPort.DataReceived += new SerialDataReceivedEventHandler(ComReceive);//串口接收中断
Thread _ComRec = new Thread(new ThreadStart(ComRec)); //串口接收数据线程
_ComRec.Start();//启动线程
}
// 读串口数据,并进队列
private void ComReceive(object sender, SerialDataReceivedEventArgs e)
{
byte[] recBuffer;//接收缓冲区
try
{
recBuffer = new byte[ComPort.BytesToRead];//接收数据缓存大小
ComPort.Read(recBuffer, 0, recBuffer.Length);//读取数据
recQueue.Enqueue(recBuffer);//读取数据入列
}
catch{...}
}
//数据出队列,在数据接收线程中执行
void ComRec()
{
while (true)
{
if (recQueue.Count > 0)
{
byte[] recBuffer = (byte[])recQueue.Dequeue();//出列
ProcessData(recBuffer);//** 此处为出问题的地方**
}
}
}
问题描述:
波特率设为115200,发送端周期(10ms)性发送长度为78字节的数据。接收端运行一段时间后,ProcessData(recBuffer)出报错,此时数组recBuffer为null。
关于发送周期:115200/8 > 78/10ms,即10ms满足速率要求。当发送周期从10ms改成100ms的时候,recBuffer为null的现象似乎很少出现了。
求问:数据出队列得到null数组的原因是什么?怎样修改可以避免这个问题?
求高人指点,小弟感激不尽!