Я работаю с 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
}