У меня есть приложение, которое получает данные от внешнего лабораторного устройства через последовательный порт.Когда я пытаюсь закрыть SerialPort, я получаю следующую ошибку:
System.IO.IOException: «Операция ввода-вывода была прервана из-за выхода из потока или запроса приложения».
Данные читаются в обработчике событий, вызванные SerialPort
event DataReceived
- по умолчанию это выполняется в отдельном потоке (AFIK).
Я подписан на Eventhandler
при установлении соединения с SerialPort
.
Я отписываюсь от EventHandler
до закрытия последовательного порта.
Код для закрытия соединения (где _chronosPort
экземпляр SerialPort
):
public void CloseConnection()
{
if (_connected)
{
_chronosPort.DataReceived -= OnDataReceived;
_chronosPort.Close();
_connected = false;
}
}
private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
{
var sp = (SerialPort) sender;
RawSample = sp.ReadTo("\r");
SampleFactory sampleFactory = new SampleFactory(RawSample, new SampleTypeExtractor());
OnSampleReady(sampleFactory.GetSample());
}
При вызове метода Close()
я получаю:
'Операция ввода-вывода была прервана из-завыход из потока или запрос приложения. '
Ошибка генерируется из метода EventHandler
SerialPort ReadTo()
, даже если он отписался от обработчика событий непосредственно перед закрытием последовательного порта.