Необработанное исключение типа "System.IO.IOException" в System.dll - C#

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

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

Здравствуйте. Недавно начал учиться программировать на C#. При создании следующей программы встретил такую ошибку: Необработанное исключение типа "System.IO.IOException" в System.dll Дополнительные сведения: Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения. Ошибка появляется сразу при старте программы. В коде, строка ошибки отмечена комментарием "ОШИБКА". Вопрос: Как побороть эту ошибку? Суть программы: одновременный ввод/вывод в COM-порт, т.е. пока вводятся команды через консоль, была возможность считывать и выводить приходящие значения в этот же момент времени. Для выполнения этой задачи были выбраны потоки. P.S. Пробовал удалить while (true) {} в теле программы. Тогда выдает такую ошибку, в том же месте: Необработанное исключение типа "System.InvalidOperationException" в System.dll Дополнительные сведения: Порт закрыт. P.P.S. Если ReadCOM и WriteCOM, использовать синхронно, то ошибки закрытого порта нет.
Листинг программы
  1. namespace TestCOM
  2. {
  3. class Program
  4. {
  5. public static SerialPort port; // Переменная для объявления Serial
  6. // ----==== Создание COM-порта ====----
  7. public static void CreateCOM() {
  8. Console.WriteLine();
  9. Console.WriteLine("Доступые COM-порты:");
  10. string[] portNames = SerialPort.GetPortNames(); //Доступные COM-порты
  11. int nc = 1; // Счетчик COM-портов
  12. foreach (String elCOM in portNames) { //Считываем доступные COM-порты и выводим их
  13. Console.WriteLine(nc + ". " + elCOM);
  14. nc++;
  15. }
  16. Console.Write("Введите имя нужного COM-порта: ");
  17. String portName = Console.ReadLine().ToUpper(); //Ввод имени COM-порта
  18. port = new SerialPort( portName, 9600 ); //Создаем COM-порт
  19. }
  20. /* ************************************************************* */
  21. // ----==== Ошибка COM-порта ====----
  22. public static void ErrorCOM(IOException ex, Exception ex2) {
  23. Console.WriteLine("----==== Ошибка соединения ====----");
  24. if (ex == null) { Console.WriteLine("Ошибка: " + ex2.Message); } else {
  25. Console.WriteLine("Ошибка: " + ex.Message);
  26. }
  27. Console.WriteLine();
  28. port.Close(); //Закрыть COM-порт
  29. }
  30. /* ************************************************************* */
  31. // ----==== Считывание COM-порта ====----
  32. public static void ReadCOM() {
  33. String dataRead = port.ReadLine().Replace("\r", ""); // ОШИБКА
  34. Console.WriteLine(port.PortName + " отправил: " + dataRead);
  35. }
  36. /* ************************************************************* */
  37.  
  38. // ----==== Отправка в COM-порт====----
  39. public static void WriteCOM() {
  40. Console.WriteLine( "Отправить: " );
  41. String dataWrite = Console.ReadLine(); // Переменная для отправки значений на COM-порт
  42. port.WriteLine( dataWrite );
  43. }
  44. /* ************************************************************* */
  45.  
  46. // ----==== Начало программы ====----
  47. public static void Main(string[] args) {
  48. Console.Title ="Тест COM-порта";
  49. Console.WriteLine("Вас приветствует программа "Тест COM-порта"");
  50. LinkCreateCOM:
  51. CreateCOM();
  52. try {
  53. //Открываем COM-порт
  54. port.Open();
  55. Console.WriteLine("----==== Соединение установлено ====----");
  56. Thread Writer = new Thread( WriteCOM );
  57. Thread Reader = new Thread( ReadCOM );
  58. while ( true ) {
  59. Writer.Start(); //Отправка значений на COM-порт
  60. Reader.Start(); //Читаем COM-порт
  61. }
  62. } catch (IOException ex) {
  63. ErrorCOM(ex, null);
  64. goto LinkCreateCOM;
  65. } catch (Exception ex) {
  66. ErrorCOM(null, ex);
  67. goto LinkCreateCOM;
  68. } finally { port.Close(); } //Закрыть COM-порт
  69. Console.WriteLine("Нажмите любую клавишу для выхода...");
  70. Console.ReadKey();
  71. }
  72. }
  73. }

Решение задачи: «Необработанное исключение типа "System.IO.IOException" в System.dll»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.ComponentModel;
  6.  
  7. namespace SPMonitor_Test {
  8.     class Program {
  9.         static void Main(string[] args) {
  10.             PortMonitor monitor = new PortMonitor("COM1", 9600);
  11.             monitor.ProgressChanged += new ProgressChangedEventHandler(monitor_ProgressChanged);
  12.             monitor.RunWorkerAsync();
  13.             string msg;
  14.             while (true) {
  15.                 Console.WriteLine("Enter message to send to port:");
  16.                 msg = Console.ReadLine();
  17.                 monitor.SendMessage(msg);
  18.             }
  19.         }
  20.  
  21.         static void monitor_ProgressChanged(object sender, ProgressChangedEventArgs e) {
  22.             string outMsg = e.UserState.ToString();
  23.             Console.WriteLine("Message from port: {0}",outMsg);
  24.         }
  25.     }
  26. }

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


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

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

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

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

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

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