1

我用 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) 时,我的数据中没有丢失字节。

此外,除了以下内容,我还没有在串口实例上设置任何其他属性。波特率、停止位、奇偶校验和数据位。

有人可以建议我任何其他替代方式,而不是在我的申请中应用时间延迟。

4

0 回答 0