我通過串口將計量器連接到計算機。我在循環中檢查值SerialPort.BytesToRead何時達到0。但即使BytesToRead不等於0,循環仍然存在。由於我是新用戶,因此無法發佈屏幕截圖,但通過調試我可以看到BytesToRead實際上不是0.SerialPort.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);
}
}
這是正常的,一個調試工件。你的代碼不能工作,你不能確保你得到了響應中的所有字節。如果NewLine屬性與比例發送的內容相匹配,通常ReadLine()將起作用。 –
事情是秤一次發送多行數據,所以我仍然必須保持它在一個循環內部以獲取所有行。我如何確保我已經達到了數據的最後?我正在試圖概括這一點,以便可以在不更改此代碼的情況下更改比例。 – NTHQ