2016-06-02 4 views
-1

Я работаю с Biomic V3 с последовательным портом связи, и все идет хорошо, пока я не отправлю символ EOT (конец передачи). Я использую фоновый рабочий для выполнения задания записи. Тайм-аут последовательного порта не происходит, и приложение зависает.Тайм-аут последовательного порта

поток

Связь:

Отправить: Ставить характер

Прием: признать характер

Отправить: заголовок

Прием: признать характер

Отправить:

пациент

Receive : 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

Выполнено. Добавьте таймер в обработчик последовательного порта, чтобы избежать тайм-аута

Смежные вопросы