직렬 포트를 통해 컴퓨터에 스케일을 인터페이스합니다. 루프 내에서 0에 도달하면 SerialPort.BytesToRead 값을 확인합니다. 하지만 BytesToRead가 0이 아니더라도 루프가 종료됩니다. 새 사용자이므로 디버그를 통해 실제로 0이 아닌 화면을 볼 수 있습니다.SerialPort.BytesToRead가 0이 아닌 경우에도 항상 0으로 평가됩니다.
이 결과로 my 데이터가 완전히 읽히지 않습니다. 나는 _port.BytesToRead > 0
과 같은 다른 표현식을 시도했지만 그 결과는 같습니다. BytesToRead의 값을 변수에 할당하더라도 루프가 없으면 ReadExisting은 척도에서 보낸 모든 데이터를 반환하지 않으므로 선택 사항이 없습니다. ReadLine도 작동하지 않습니다. BytesToRead가 항상 0 인 이유는 무엇입니까? 디버거없이 실행되므로 더 브레이크 포인트가 발생되지 않을 때 당신이, 읽을 사실 바이트에 있다는 것을 충분히 느린거야 디버거를 실행하지만 때
private void PortDataReceived(object sender, SerialDataReceivedEventArgs e)
{
{
var input = string.Empty;
// Reads the data one by one until it reaches the end
do
{
input += _port.ReadExisting();
} while (_port.BytesToRead != 0);
_scaleConfig = GenerateConfig(input);
if (ObjectReceived != null)
ObjectReceived(this, _scaleConfig);
}
}
이것은 일반적인 문제이며 디버깅 아티팩트입니다. 코드가 작동하지 않을 수 있습니다. 응답의 모든 바이트가 있는지 확인하지 못합니다. 일반적으로 ReadLine()은 NewLine 속성이 척도가 전송하는 것과 일치하는 경우 작동합니다. –
문제는 저울이 한 번에 여러 줄의 데이터를 보내서 모든 줄을 얻기 위해 루프 안에 보관해야한다는 것입니다. 내가 데이터의 끝까지 도달했는지 어떻게 알 수 있을까? 이 코드를 변경하지 않고도 스케일을 변경할 수 있도록 일반화하려고합니다. – NTHQ