Свойство BytesToRead последовательного порта - корректен только первый результат - C#
Формулировка задачи:
Используя компонент SerialPort получаю данные посредством делегата по событию DataReceive:
Проблемс в том, что при
int BTR; delegate void changetext(string a); changetext mytext; private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { char a=(char)3; BTR = serialPort1.BytesToRead; string BUF = Convert.ToString(serialPort1.ReadTo(a.ToString())); //читаем данные до 3-го символа ansi таблицы if (!String.IsNullOrEmpty(BUF)) { if (this.InvokeRequired) this.Invoke(mytext, BUF); else mytext(BUF); } } void MyText1(string a) { listBox1.Items.Add(a); Text = Convert.ToString(BTR); //приянтые данные выводим в листбокс, кол-во байт - на заголовок формы }
первой
передаче пакета байтов переменная BTR = serialPort1.BytesToRead; выдаёт правильное значения, при последующих передачах BTR равняется исключительно единице. Почему так происходит?Решение задачи: «Свойство BytesToRead последовательного порта - корректен только первый результат»
textual
Листинг программы
StringBuilder buffer = new StringBuilder(256); private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { var port = sender as SerialPort; while (port.BytesToRead > 0) { int current = port.ReadChar(); if (current == 3 && buffer.Length > 0) { var BUF = buffer.ToString(); buffer.Clear(); if (this.InvokeRequired) this.Invoke(mytext, BUF); else mytext(BUF); } else buffer.Append((char)current); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д