Стажеры нередко назначаются для преобразования старого кода на более новую платформу.
Есть несколько улучшений, которые вы можете сделать.
1) Следующая стратегия хороша, когда байты, отправляемые через порт, должны интерпретироваться в блоках, таких как команды.У вас есть какой-то протокол?То, что определяет формат сообщения, которое вы отправляете.Например, конкретный разделитель для указания начала и длины предстоящей команды.Это позволяет быстро определить, была ли команда отправлена только наполовину или отсутствовали байты.Еще лучше добавить CRC в конце.
2) Вместо чтения по таймеру основывайте себя на событиях, помеченных вашим объектом последовательного порта.Вот пример того, что я использую:
//OnReceive event will only fire when at least 9 bytes are in the buffer.
serialPort.ReceivedBytesThreshold = 9;
//register the event handlers
serialPort.DataReceived += new SerialDataReceivedEventHandler(OnReceive);
serialPort.PinChanged += new SerialPinChangedEventHandler(OnPinChanged);
В приведенном выше коде я установил порог 9, вы должны изменить его на тот, который соответствует вашему контексту.Кроме того, событие Pinaged - это что-то хорошее для мониторинга, оно позволит вам быстро определить, был ли кабель отсоединен.Есть еще кое-что об этом, касающееся CTSChanged, но вы можете посмотреть его, если вам интересно.
Наконец, если это не поможет вам продвинуться немного дальше, покажите пример возникшей проблемы, поэтому людиздесь может оказать вам дополнительную помощь.