Windows mobile 伪TimeoutException读取.NETCF串行端口

Windows mobile 伪TimeoutException读取.NETCF串行端口,windows-mobile,compact-framework,serial-communication,Windows Mobile,Compact Framework,Serial Communication,编辑:这是一个硬件问题……获得一个重复的设备或电缆似乎可以解决这个问题 您好,我正在努力从.NETCF中的串行端口读取大量数据(~1MB) 我正在读取一堆GPS数据,但在调用m_serial.Read(..)时随机接收到一个TimeoutException 串行端口上肯定有数据流——转储需要几分钟。当我得到超时时,我可以将串行电缆插入另一台计算机,然后看到稳定的数据流 我尝试了几种不同的方法来实现这一点——SerialPort.Read、SerialPort.ReadLine、SerialPor

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

您好,我正在努力从.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);
                        }
                  }
//m_serial是SerialPort对象,ReadTimeout设置为9000
字符串eoftest=“\r\n$PSRF206”;
byte[]bEOFTest=ascienceoding.ASCII.GetBytes(eoftest);
int bufferSize=1024*16;
字节[]缓冲区=新字节[bufferSize];
int testingIndex=0;
while(测试指数<测试长度)
{
int count=m_serial.Read(缓冲区,0,缓冲区大小);
如果(计数>0)
{
for(int i=0;i=测试长度)
打破
}
其他的
测试指数=0;
}
writer.Write(缓冲区,0,计数);
}
}
更新:

我发现该代码在摩托罗拉Symbol设备上运行良好,但在我拥有的intermec设备上运行不好。我已经更换了所有的硬件,试图消除这种可能性,但它仍然不起作用


这两款设备都是Windows Mobile 5.0

,建议您随时尝试使用。它的接口兼容,这样你就有了所有的源到设备管理器调用,所以你可以看到为什么会抛出任何错误。

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

你为什么不能使用GPS中间驱动程序,所以你不必做这些低级的事情?据我所知,该API只是用于获取当前值。我们的设备断开连接一个工作日,然后运行此代码以获得数据转储。我在那个链接中看不到那个功能,尽管我可能遗漏了什么?不,只是为了获取当前值。我不知道你有多讨厌。