以下のコードが欠落したり、データが失われたりする理由を誰にも教えてください。私は一晩中グーグルグーグルで行ってきましたが、何の指針も見つけられません。シリアルポートは次の設定を使用しています。 38400、n、8,1xon/xoffフロー制御。 ReceivedBytesThreshold = 1SerialPort + CF 2.0はデータの損失を防ぎます
isReceivingとstockReceivedは
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string dataReceived = serialPort1.ReadExisting();
bytecount += dataReceived.Length;
processSerialData(dataReceived);
}
private void processSerialData(string dataReceived)
{
if (isReceiving == false)
{
int stxpos = dataReceived.IndexOf('\x02');
if (stxpos != -1)
{
dataReceived = dataReceived.Replace("\x02", "");
labelcaption = "Receiving... ";
this.Invoke(new EventHandler(SetLabel));
isReceiving = true;
}
}
int etxpos = dataReceived.IndexOf('\x03');
if (etxpos != -1)
{
dataReceived = dataReceived.Replace("\x03", "");
//tmpFile.Write(dataReceived);
writeToFile(dataReceived);
tmpFile.Close();
isReceiving = false;
stockReceived = true;
}
// Now we need to write the data to file
if (isReceiving == true)
{
if ((bytecount/recordSize) % 100 == 0)
{
labelcaption = "Receiving... " + (bytecount/recordSize);
this.Invoke(new EventHandler(SetLabel));
}
//tmpFile.Write(dataReceived);
writeToFile(dataReceived);
}
}
ありがとうChris 私はロックブロックで同じコードを処理しました。しかしそれはうまくいかなかった。あなたの意見では、lock(syncObject)以外の何かを使うべきでしょうか? 私はSTXとETXを探していますが、ASCIIエンコーディングにするべきではありませんか?失われたデータは、大量のファイルでのみ発生します。私がテストしているファイルは約484KBであり、文字通りファイルの中央の奇数の文字です。コードは、いつもstx/etx okを受け取りそうです。 –
ありがとうChris私はロックブロック内で同じコードを処理しようとしました。しかしそれはうまくいかなかった。あなたの意見では、lock(syncObject)以外の何かを使うべきでしょうか?私はSTXとETXを探していますが、それはASCIIエンコーディングにするべきですか?失われたデータは、大量のファイルでのみ発生します。私がテストしているファイルは約484KBであり、文字通りファイルの中央の奇数の文字です。コードはいつもstx/etx okを受け取りそうです –