Необработанное исключение типа "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);
        }
    }
}

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


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

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

8   голосов , оценка 4 из 5
Похожие ответы