代码之家  ›  专栏  ›  技术社区  ›  Clyde

虚假的TimeoutException读取.netcf serialport

  •  0
  • Clyde  · 技术社区  · 17 年前

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

    您好,我正在努力从.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

    2 回复  |  直到 16 年前
        1
  •  0
  •   ctacke    17 年前

    作为建议,您可以尝试使用 OpenNETCF serial port library . 它与接口兼容,这样您就可以将所有源代码下放到设备管理器调用中,这样您就可以了解为什么会抛出任何错误。

        2
  •  0
  •   Clyde    17 年前

    太好了……看起来是硬件问题……我现在有其他设备可用,而且工作正常……

    推荐文章