C# SerialPort AsyncRead BaseStream получает массив байтов по частям - PullRequest
0 голосов
/ 11 января 2020

Когда я разрабатываю свое приложение с использованием serialport.basestream.asyncread, у меня возникли вопросы:

1) Что мне нужно сделать, чтобы убедиться, что я получил правильный объем данных, предположим, что я хочу извлекать 40 байтов

public async byte[] readData(SerialPort port){
      byte[] output = new byte[40];
      int x = await port.BaseStream.ReadAsync(output, 0, output.Length);
}

Значение x на выходе может быть меньше 40, в этом случае, что я должен реализовать эту функцию?

2) В чем разница между serialPort.Flush() https://docs.microsoft.com/en-us/previous-versions/windows/embedded/jj652595 (v% 3Dvs.102)

serialPort.DiscardInBuffer() и serialPort.DiscardOutBuffer()?

3) Это связано с вопросом 1. Предположим, я передаю Поток данных из последовательного порта. Мне нужно прочитать их по частям (скажем, 40 байт на пакет), и я планирую использовать другой поток, работающий над извлечением байта. Я прочитал статью здесь: блокировка потока последовательного порта при обработке данных, считанных с последовательного порта . Нужно ли использовать lock(), чтобы избежать чего-то? Если так, что такое «что-то»?

Спасибо вам за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...