Как закрыть поток (Thread) чтения SerialPort - C#

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

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

Как грамотно организовать (а главное завершать) поток чтения SerialPort? Проблемы с этим кодом: - ошибка при закрытие порта: "операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения" - программа (или поток/процес) не завершается после собсно закрытия программы - загружает ЦП на 100%, начинает тормозить система - Thread.Abort(): если побаловаться с ним (рядом с закрытием порта ставил), то вот такое выдает: "дескриптор SafeHandle был закрыт"
Листинг программы
  1. readThread = new Thread(read);
  2. readThread.Start();
  3. port.Open();
  4. port.Close(); - исключение "Операция ввода/вывода была прервана бла-бла..."
  5. (readThread.ThreadState = Running)
  6. port.Open() - ThreadState = WaitSleepJoin
  7. port.Close() - исключение и ThreadState = running
Листинг программы
  1. SerialPort port;
  2. Thread readThread;
  3. public Form1()
  4. {
  5. InitializeComponent();
  6. port = new SerialPort("COM1");
  7. }
  8. private void read()
  9. {
  10. while (true)
  11. {
  12. if (port.IsOpen)
  13. {
  14. try
  15. {
  16. string mess = port.ReadLine();
  17. Invoke(new EventHandler(delegate { textBox2.AppendText("modem: " + mess + Environment.NewLine); }));
  18. }
  19. catch (Exception ex) { MessageBox.Show(ex.Message + "\n: read()"); }
  20. }
  21. }
  22. }
  23. private void OpenPort()
  24. {
  25. port.Open();
  26. readThread = new Thread(read);
  27. readThread.Start();
  28. }
  29. private void ClosePort()
  30. {
  31. port.Close();
  32. }

Решение задачи: «Как закрыть поток (Thread) чтения SerialPort»

textual
Листинг программы
  1. catch (IOException) { } * * //это исключение появится при закрытии без аборта
  2.  catch (TimeoutException) { }
  3.  catch (Exception ex) { MessageBox.Show(ex.Message + "\n: read()"); }

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


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

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

14   голосов , оценка 3.643 из 5

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

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

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