Я прочитал здесь много вопросов о том, как читать данные из последовательных портов с использованием класса .NET SerialPort, но ни один из рекомендованных подходов не оказался для меня полностью эффективным.
Вот код, который я использую сейчас:
SerialPort port = new SerialPort("COM1");
port.DataReceived += new SerialDataReceivedEventHandler(MyDataReceivedHandler);
И обработчик событий:
void MyDataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
int count = port.BytesToRead;
byte[] ByteArray = new byte[count];
port.Read(ByteArray, 0, count);
}
Но я по-прежнему иногда пропускаю некоторые данные. Я пробовал различный способ чтения данных в обработчике событий, но не повезло.
Поскольку .NET 4.5 предоставляет новые возможности для выполнения некоторых асинхронных задач, например, с помощью метода ReadAsync, который, как представляется, можно использовать в потоке SerialPort, мне любопытно чтобы узнать, какой будет рекомендуемый подход для обработки этих случаев.