Что я могу сделать против следующей ошибки SerialPort С#

Если я запускаю свой следующий код, который я создал с помощью SharpDevelop:

        SerialPort serial = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);

        void sendMsg_Click(object sender, EventArgs e)
        {
            serial.Open();
            serial.WriteLine(textBox1.Text);
            serial.Write(new byte[] {0x0A, 0xE2, 0xFF}, 0, 3);
            serial.Close();
        }

Ниже показано исключение, возникающее при выполнении кода:

Исключением является следующее:

System.IO.IOException: Falscher Parameter.
bei System.IO.Ports.InternalResources.WinIOError
bei System.IO.Ports.SerialStream.EndWrite
bei System.IO.Ports.SerialStream.Write
bei System.IO.Ports.SerialPort.Write
bei System.IO.Ports.SerialPort.WriteLine
bei Chat_via_RS232.MainForm.sendMsg_Click in c:\Users\admin\Documents\SharpDevelop Projects\Latias.eu IT\Chat via RS232\MainForm.cs:Zeile 35
bei System.Windows.Forms.Control.OnClick
bei System.Windows.Forms.Button.OnClick
bei System.Windows.Forms.Button.OnMouseUp
bei System.Windows.Forms.Control.WmMouseUp
bei System.Windows.Forms.Control.WndProc
bei System.Windows.Forms.ButtonBase.WndProc
bei System.Windows.Forms.Button.WndProc
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc
bei System.Windows.Forms.NativeWindow.DebuggableCallback
bei System.Windows.Forms.Application.ComponentManager.FPushMessageLoop
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop
bei System.Windows.Forms.Application.Run
bei Chat_via_RS232.Program.Main in c:\Users\admin\Documents\SharpDevelop Projects\Latias.eu IT\Chat via RS232\Program.cs:Zeile 24

Может кто-то мне помочь, пожалуйста.

С уважением

Лала


person Lala Sabathil    schedule 30.01.2017    source источник
comment
Каково точное фактическое значение textBox1.Text при возникновении ошибки?   -  person Dai    schedule 30.01.2017
comment
Какой из них MainForm.cs:Zeile 35?   -  person Fildor    schedule 30.01.2017
comment
Он уже говорит вам: Неправильный параметр. Если бы вы добавили номера строк или сказали нам, где произошел сбой (здесь указана строка 35, но мы не знаем, какая именно), вы могли бы получить дополнительную помощь. Но вы должны быть в состоянии решить это самостоятельно с этой информацией.   -  person Matthias247    schedule 30.01.2017
comment
строка 35 — это serial.Close();   -  person Lala Sabathil    schedule 30.01.2017
comment
в моем текстовом поле я набираю abc в качестве тестовой строки   -  person Lala Sabathil    schedule 30.01.2017
comment
Хорошо, если ошибка в SerialPort.Close, то это проблема с параметрами, которые вы передаете методу Open. MSDN говорит, что будет выдана ошибка IOException, если попытка установить состояние базового порта не удалась. Например, параметры, переданные из этого объекта SerialPort, недействительны   -  person Pikoh    schedule 30.01.2017
comment
com2 - это виртуальный последовательный порт, я использовал com1, и он работает   -  person Lala Sabathil    schedule 30.01.2017
comment
Неправильный параметр Google для SerialPort, и вы обнаружите, что у других людей была такая же проблема, включая заголовок stackoverflow.com/questions/14885288/   -  person Joe    schedule 30.01.2017
comment
Кажется, я читал, что у других есть проблемы с виртуальными последовательными портами. Вы пытались передать конструктору SerialPort только имя порта и посмотреть, не получите ли вы таким образом ошибку? SerialPort serial = new SerialPort("COM2");   -  person Pikoh    schedule 30.01.2017
comment
да, это я попробовал первым, но это не работает эфир   -  person Lala Sabathil    schedule 30.01.2017
comment
Вам действительно нужно установить все настройки последовательного порта, даже если вы просто придерживаетесь стандартных значений! Основная причина в том, что COM-порт не сбрасывает текущие состояния при его открытии. Поэтому, если другая программа устанавливает для COM-порта какие-то неудобные значения, и вы не перезаписываете их активно, они будут приняты вашим текущим соединением.   -  person Oliver    schedule 30.01.2017
comment
оба пути не работают   -  person Lala Sabathil    schedule 30.01.2017


Ответы (1)


Ошибка в этой строке:

serial.WriteLine(textBox1.Text)

В вашем отчете об исключении показано, что возникает IOException, однако в документации для WriteLine IOException не указано как задокументированное исключение: https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.writeline(v=vs.110).aspx — возможно, что-то еще идет не так.

В документации для SerialPort.Open указано, что если порт недоступен, то там создается исключение ( https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.open(v=vs.110).aspx ), но в вашей программе этого не происходит. Я подозреваю, что в функцию WriteLine могут передаваться недопустимые значения. Что произойдет, если вы переместите вызов Write( Byte[] ) перед вызовом WriteLine?

person Dai    schedule 30.01.2017
comment
если я только добавлю байт записи и удалю строку записи, та же ошибка появится при записи - person Lala Sabathil; 30.01.2017