I have a program that reads and writes a hexadecimal byte[] from SerialPort
.
My program only use 5 bytes(five hexadecimal) in one communication.
The problem is that the DataReceived occurence cycle is random. So, sometimes it reads 5 bytes, sometimes it reads 4 bits.
I always want DataReceived to read 5 bytes. Is it possible?
Below code is the logic of program that I wrote.
serialPort.Write(sendData, 0, sendData.Length);
serialPort.DataReceived += (sender, e) =>
{
var receiveSize = serialPort.BytesToRead;
var buffer = new byte[receiveSize];
serialPort.Read(buffer, 0, buffer.Length);
this.Invoke(() =>
{
readRichTextBox.AppendText($"{string.Join(" ", Encoding.UTF8.GetString(buffer))}\n");
});
};
I solved it after creating a empty List<byte>
. Is there a better way?
private List<byte> bytes = new List<byte>();
serialPort.DataReceived += (sender, e) =>
{
var receiveSize = serialPort.BytesToRead;
var buffer = new byte[receiveSize];
serialPort.Read(buffer, 0, buffer.Length);
this.Invoke(() =>
{
foreach (var b in buffer)
{
bytes.Add(b);
}
if (bytes.Count == 10)
{
readRichTextBox.AppendText($"{string.Join(" ", Encoding.UTF8.GetString(bytes.ToArray()))}\n");
bytes.Clear();
}
});
};