Serial port 串行端口超时

Serial port 串行端口超时,serial-port,timeout,freeze,Serial Port,Timeout,Freeze,我正在使用带有串口通信的Biomic V3,在发送EOT(传输结束)字符之前,一切都很顺利。我正在用一个后台工作人员来做写作工作。串口超时未发生,应用程序挂起 通信流: 发送:排队字符 接收:确认字符 发送:标题 接收:确认字符 发送:患者 接收:确认字符 发送:仪器订单 接收:确认字符 发送:页脚 接收:确认字符 发送:传输结束字符(应用程序挂起) 有人能帮我解决这个问题吗,因为我没有主意了! 我先谢谢你 #region Static Variables private st

我正在使用带有串口通信的Biomic V3,在发送EOT(传输结束)字符之前,一切都很顺利。我正在用一个后台工作人员来做写作工作。串口超时未发生,应用程序挂起

通信流:

发送:排队字符

接收:确认字符

发送:标题

接收:确认字符

发送:患者

接收:确认字符

发送:仪器订单

接收:确认字符

发送:页脚

接收:确认字符

发送:传输结束字符(应用程序挂起)

有人能帮我解决这个问题吗,因为我没有主意了! 我先谢谢你

    #region Static Variables

    private static AutoResetEvent _SendWaitHandle = new AutoResetEvent(false);

    #endregion

    #region Member Variables

    private object _Lock = new object();

    private BackgroundWorker _BackgroundWorker;

    #endregion

    #region Public Methods

    public void Write()
    {
        Monitor.Enter(_Lock);
        try
        {
            // Reset Handle
            _SendWaitHandle.Reset();

            // Send Data Logic

            // Wait for ACK
            if (_SendWaitHandle.WaitOne(1000))
            {
                // Send EOT
            }
            else
            {
                // Timeout Occurred
                // Your Logic To Handle Timeout
            }
        }
        catch (Exception)
        {

            throw;
        }
        finally
        {
            Monitor.Exit(_Lock);
        }
    }

    #endregion

    #region Private Methods

    private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        // When ACK is received call SET
        _SendWaitHandle.Set();

    }


    private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        write();
    }

    #endregion
}

我自己做的。向串行端口处理程序添加计时器以避免超时