Свойство 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);
   }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы