아래 코드가 누락되거나 데이터가 삭제되는 이유를 누구나 알 수 있습니까? 나는 밤새도록 인터넷 검색을하고 있지만 어떤 조언도 찾을 수 없다. 직렬 포트는 다음 설정을 사용합니다. 38400, n, 8,1 xon/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를 픽업하는 것처럼 보입니다. –