日期:2014-05-16  浏览次数:21152 次

C#串口读取大数据量问题 求解
一下代码只是读的代码

while (true)
 {
           int listLeng = comm.BytesToRead;
           Thread.Sleep(500);
            if (listLeng == comm.BytesToRead)
                 break;
   }



按道理说,这样可以一直把缓存区的数据全部读完,直到缓存区的数据不再发生变化。
问题在于:每次读取最大只能读取到4096个字节就不读了,其实终端不停地在给缓存区写数据,用串口工具可以看到不停地在收。
          请问是不是缓存区的数据最大只能存储4096个字节?
          请问造成这种问题的原因是什么,求高手解决下,因为串口工具可以一直在收数据,C#写的这个就不行。只能收到4096
------解决方案--------------------
BytesToRead的最大值是由ReadBufferSize属性决定的,ReadBufferSize属性默认值是4096,正好是一页内存。ReadBufferSize属性会忽略掉比4096小的值,其实ReadBufferSize指的指示Windows-created buffer,而BytesToRead除了指Windows-created buffer也包括 SerialPort buffer,所以ReadBufferSize的值实际上恒小于BytesToRead。
附上:关于串口缓存区的讨论
期待其他更深入的答案。