我正在使用带有串口通信的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
}
答案 0 :(得分:-1)
自己完成。将计时器添加到串行端口处理程序以避免超时