Когда я разрабатываю свое приложение с использованием 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()
, чтобы избежать чего-то? Если так, что такое «что-то»?
Спасибо вам за помощь.