-1
바이오 포트 V3와 시리얼 포트 통신으로 작업 중이며, EOT (전송 종료) 문자를 보낼 때까지 모든 것이 잘됩니다. 쓰기 작업을하기 위해 배경 작업자를 사용하고 있습니다. 직렬 포트 시간 초과가 발생하지 않고 응용 프로그램이 중지됩니다.시리얼 포트 타임 아웃
통신 흐름 :
보내기 : 대기열 문자
수신 : 인정 문자
보내기 : 헤더
가 수신 : 문자 인식
보내기 : 환자
수신 : ackn owledge 문자
보내기 : 악기 위해
수신 : 인정 문자
보내기 : 바닥 글
는 수신 : 문자 인식
보내기 : 전송 종료 문자 (응용 프로그램 중단)
아이디어가 부족하여 누구든지이 문제를 해결할 수 있습니까? 미리 감사드립니다.
#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
}