シリアルポートを介してスケールをコンピューターに接続しています。ループ内で値SerialPort.BytesToReadが0に達したときの値を確認します。ただし、BytesToReadが0に等しくなくても、ループは終了します。新しいユーザーであるためスクリーンショットを投稿できませんが、デバッグを実行すると、BytesToReadが実際には0ではないことがわかります。
その結果、データが完全に読み取られなくなります。のようなさまざまな表現を試しまし_port.BytesToRead > 0
たが、結果は同じです。BytesToReadの値を変数に割り当てても、0が返されます。ループがないと、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);
}
}