Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения - C#

Узнай цену своей работы

Формулировка задачи:

Такая проблема. Прибор посылает каждые 4 сек данные. Считываю с порта по событию DataReceived. Закрываю порт по кнопке

ПрочитатьToolStripButton

. Так вот, если нажать эту кнопку не в нужный момент, выскакивает сообщение:

Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения.

Как избавиться от этой проблемы? Кусок кода:
Листинг программы
  1. ComPort.DataReceived += new SerialDataReceivedEventHandler(Port_Read);
  2. void Port_Read(object sender, SerialDataReceivedEventArgs e)
  3. {
  4. try
  5. {
  6. for (int i = 0; i < 344; i++)
  7. {
  8. rez[i] = Convert.ToByte(ComPort.ReadByte());
  9. }
  10. SetText(Encoding.ASCII.GetString(rez)); //вызов делегата
  11. }
  12. catch (Exception e3)
  13. {
  14. MessageBox.Show(e3.Message);
  15. }
  16. }
  17. //Открытие - Закрытие порта
  18. private void ПрочитатьToolStripButton_Click(object sender, EventArgs e)
  19. {
  20. try
  21. {
  22. if (ComPort.IsOpen)
  23. {
  24. toolStripComboBox1.Enabled = false;
  25. ComPort.Close();
  26. }
  27. else
  28. {
  29. ComPort.Open();
  30. }
  31. }
  32. catch (Exception e1)
  33. {
  34. MessageBox.Show(e1.Message);
  35. }
  36. }
Такая же ошибка может выскакивать, если вытаскиваешь кабель RS с прибора
не в нужный момент

Решение задачи: «Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения»

textual
Листинг программы
  1. if (ComPort.IsOpen)
  2.                 {                              
  3.                     toolStripComboBox1.Enabled = false;
  4.                     ComPort.DataReceived -= Port_Read;
  5.                     ComPort.Close();
  6.                 }
  7.                 else
  8.                 {
  9.                     ComPort.DataReceived += Port_Read;
  10.                     ComPort.Open();                  
  11.                 }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы