我用C#编写了一些应用程序,以从(USB-SerialPort)付款终端读取字节。
但是当我从Windows串行端口的读取缓冲区读取数据时,我看到应用程序中的字节丢失/被覆盖。
我有以下代码用于在触发DataReceivedEvent时打开端口并从串行端口读取字节(从ReadExisting或ReadByteArray)。
//Open the port
m_port.Open();
//attach the event handler
m_port.ErrorReceived += OnSerialErrorReceived;
m_port.DataReceived += OnSerialDataReceived;
public void OnSerialDataReceived(object sender ,SerialDataReceivedEventArgs serialDataArgs)
{
//Thread.Sleep(20);
//int numberOfBytesToRead = m_port.BytesToRead;
//byte[] readByteArray = new byte[m_port.BytesToRead];
//m_port.Read(readByteArray, 0, readByteArray.Length);
string readData = m_port.ReadExisting();
ParseWLinkProtocolMsgToHexStringArray(Encoding.UTF8.GetBytes(readData));
}
但是当我在使用OnSerialDataReceived方法读取数据之前使用Thread.Sleep(20ms)时,我的数据中没有丢失的字节。
除了以下内容外,我还没有在串行端口实例上设置任何其他属性。 BaudRate,StopBits,奇偶校验和DataBits。
有人可以建议我其他任何替代方法而无需在我的应用程序中应用时间延迟。