Bogus TimeoutException读取.NETCF SerialPort

时间:2009-06-15 22:19:31

标签: windows-mobile compact-framework serial-communication

编辑:是硬件问题......获得重复的设备或电缆似乎解决了这个问题。

您好,我正试图从.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);
                        }
                  }

更新:

我发现代码在Motorola Symbol设备上运行正常,但在我所拥有的intermec设备上却没有。我已经换掉了所有的硬件试图消除这种可能性,但它仍然不起作用。

这两款设备均为Windows Mobile 5.0

2 个答案:

答案 0 :(得分:0)

作为建议,您始终可以尝试使用OpenNETCF serial port library。它的接口兼容,并且您可以将所有源都放到设备管理器调用中,这样您就可以看到为什么会抛出任何错误。

答案 1 :(得分:0)

很棒....看起来这是一个硬件问题....我现在有一些其他设备可用,它工作正常......