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