編集:ハードウェアの問題でした.....重複したデバイスまたはケーブルを入手すると、問題が解決したようです。
こんにちは、私は.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);
}
}
アップデート:
コードはMotorolaSymbolデバイスでは正常に実行されますが、使用しているintermecデバイスでは正常に実行されないことがわかりました。可能性としてそれを排除するためにすべてのハードウェアを交換しましたが、それでも機能しません。
どちらのデバイスもWindowsMobile5.0です