编辑:是一个硬件问题……获得一个重复的设备或电缆似乎解决了这个问题。
您好,我正在努力从.netcf中的串行端口读取大量数据(约1MB)。
我正在读取一个GPS数据的转储,但我正在随机接收一个对m_serial.read(..)的调用的TimeoutException。
串行端口上肯定有数据流——转储需要几分钟时间。当我超时时,我可以将串行电缆插入另一台计算机,然后看到数据稳定地流过。
我尝试了几种不同的方法来实现这一点——serialport.read、serialport.readline、serialport.readexisting——它们都将在短时间内读取(随机量),然后以TimeoutException失败。
任何帮助都非常感谢,谢谢!当确实有数据可用时,我基本上无法获得超时,以38400波特的速度传输。
//m_serial is a SerialPort object, ReadTimeout set to 9000
string eoftest = "\r\n$PSRF206";
byte[] bEOFTest = ASCIIEncoding.ASCII.GetBytes(eoftest);
int bufferSize = 1024 * 16;
byte[] buffer = new byte[bufferSize];
int testingIndex = 0;
while (testingIndex < bEOFTest.Length)
{
int count = m_serial.Read(buffer, 0, bufferSize);
if (count > 0)
{
for (int i = 0; i < count; i++)
{
if (buffer[i] == bEOFTest[testingIndex])
{
testingIndex++;
if (testingIndex >= bEOFTest.Length)
break;
}
else
testingIndex = 0;
}
writer.Write(buffer, 0, count);
}
}
更新:
我发现代码在摩托罗拉符号设备上运行良好,但在我拥有的Intermec设备上运行不好。我已经换掉了所有的硬件,试图排除这种可能性,但它仍然不起作用。
这两个设备都是Windows Mobile 5.0