Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения - C#
Формулировка задачи:
Такая проблема.
Прибор посылает каждые 4 сек данные. Считываю с порта по событию DataReceived.
Закрываю порт по кнопке
ПрочитатьToolStripButton
. Так вот, если нажать эту кнопку не в нужный момент, выскакивает сообщение:Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения.
Как избавиться от этой проблемы? Кусок кода:ComPort.DataReceived += new SerialDataReceivedEventHandler(Port_Read); void Port_Read(object sender, SerialDataReceivedEventArgs e) { try { for (int i = 0; i < 344; i++) { rez[i] = Convert.ToByte(ComPort.ReadByte()); } SetText(Encoding.ASCII.GetString(rez)); //вызов делегата } catch (Exception e3) { MessageBox.Show(e3.Message); } } //Открытие - Закрытие порта private void ПрочитатьToolStripButton_Click(object sender, EventArgs e) { try { if (ComPort.IsOpen) { toolStripComboBox1.Enabled = false; ComPort.Close(); } else { ComPort.Open(); } } catch (Exception e1) { MessageBox.Show(e1.Message); } }
Такая же ошибка может выскакивать, если вытаскиваешь кабель RS с прибора
не в нужный момент Решение задачи: «Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения»
textual
Листинг программы
if (ComPort.IsOpen) { toolStripComboBox1.Enabled = false; ComPort.DataReceived -= Port_Read; ComPort.Close(); } else { ComPort.DataReceived += Port_Read; ComPort.Open(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д