我正在WinForms中创建一个C#应用程序,该应用程序应该使用串行通讯(SerialPort类)。
我的应用程序的想法很简单: 1)我将PC应用程序连接到COM端口,并连接到硬件设备(微控制器)。 2)当我按下UI中的按钮时,应用程序应开始通过串行将某些数据发送到该设备,然后将其接收回(反映)。
您能否告诉我: 1)我正在使用正确的接收方式,或者还有另一种更好的接收方式。 2)我观察到串行缓冲区中的数据随着时间累积,并且我开始收到比预期更多的数据,并且我需要一种方法在每次传输之前清空此串行缓冲区,因此当我读取数据时,我只会收到最后一个消息已反映。
对于接收,我使用轮询模式,并且使用“ SerialPort”类中的方法“ Read()”
// this is my thread
private void Receive()
{
// keepReading is bool variable
// to stop the thread
while (continueToRead)
{
if (ComPort.IsOpen)
{
int arrayLength = ComPort.BytesToRead;
byte[] newReceivedData = new byte[arrayLength];
try
{
Read(ref newReceivedData, 0, arrayLength);
buffer.AddRange(newReceivedData);
// lastMessageSentLength-this variable
// equals to numbers of bytes sent in last message
// so I expect to receive the same bytes
if (buffer.Count >= lastMessageSentLength)
{
// I tried to empty buffer with this flush method,
// but it didn't help :(
// ComPortUart.BaseStream.Flush();
buffer.RemoveRange(0, arrayLength);
}
}
catch (TimeoutException)
{
}
}
else
{
TimeSpan wait = new TimeSpan(0, 0, 0, 0, 40);
Thread.Sleep(wait);
}
}
}
预先感谢