2016-06-02 10 views
-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 
} 

답변

-1

직접 작성하십시오. 시간 초과를 피하기 위해 타이머를 직렬 포트 처리기에 추가하십시오.