Необработанное исключение типа "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, использовать синхронно, то ошибки закрытого порта нет.
namespace TestCOM { class Program { public static SerialPort port; // Переменная для объявления Serial // ----==== Создание COM-порта ====---- public static void CreateCOM() { Console.WriteLine(); Console.WriteLine("Доступые COM-порты:"); string[] portNames = SerialPort.GetPortNames(); //Доступные COM-порты int nc = 1; // Счетчик COM-портов foreach (String elCOM in portNames) { //Считываем доступные COM-порты и выводим их Console.WriteLine(nc + ". " + elCOM); nc++; } Console.Write("Введите имя нужного COM-порта: "); String portName = Console.ReadLine().ToUpper(); //Ввод имени COM-порта port = new SerialPort( portName, 9600 ); //Создаем COM-порт } /* ************************************************************* */ // ----==== Ошибка COM-порта ====---- public static void ErrorCOM(IOException ex, Exception ex2) { Console.WriteLine("----==== Ошибка соединения ====----"); if (ex == null) { Console.WriteLine("Ошибка: " + ex2.Message); } else { Console.WriteLine("Ошибка: " + ex.Message); } Console.WriteLine(); port.Close(); //Закрыть COM-порт } /* ************************************************************* */ // ----==== Считывание COM-порта ====---- public static void ReadCOM() { String dataRead = port.ReadLine().Replace("\r", ""); // ОШИБКА Console.WriteLine(port.PortName + " отправил: " + dataRead); } /* ************************************************************* */ // ----==== Отправка в COM-порт====---- public static void WriteCOM() { Console.WriteLine( "Отправить: " ); String dataWrite = Console.ReadLine(); // Переменная для отправки значений на COM-порт port.WriteLine( dataWrite ); } /* ************************************************************* */ // ----==== Начало программы ====---- public static void Main(string[] args) { Console.Title ="Тест COM-порта"; Console.WriteLine("Вас приветствует программа "Тест COM-порта""); LinkCreateCOM: CreateCOM(); try { //Открываем COM-порт port.Open(); Console.WriteLine("----==== Соединение установлено ====----"); Thread Writer = new Thread( WriteCOM ); Thread Reader = new Thread( ReadCOM ); while ( true ) { Writer.Start(); //Отправка значений на COM-порт Reader.Start(); //Читаем COM-порт } } catch (IOException ex) { ErrorCOM(ex, null); goto LinkCreateCOM; } catch (Exception ex) { ErrorCOM(null, ex); goto LinkCreateCOM; } finally { port.Close(); } //Закрыть COM-порт Console.WriteLine("Нажмите любую клавишу для выхода..."); Console.ReadKey(); } } }
Решение задачи: «Необработанное исключение типа "System.IO.IOException" в System.dll»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; namespace SPMonitor_Test { class Program { static void Main(string[] args) { PortMonitor monitor = new PortMonitor("COM1", 9600); monitor.ProgressChanged += new ProgressChangedEventHandler(monitor_ProgressChanged); monitor.RunWorkerAsync(); string msg; while (true) { Console.WriteLine("Enter message to send to port:"); msg = Console.ReadLine(); monitor.SendMessage(msg); } } static void monitor_ProgressChanged(object sender, ProgressChangedEventArgs e) { string outMsg = e.UserState.ToString(); Console.WriteLine("Message from port: {0}",outMsg); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д