Это исключение часто происходит с виртуальными (например, USB) COM-портами, которые не имеют базовой физической реализации RS232.Такие порты не управляют битами состояния, и из-за этого метод SerialPort.Open()
вызывает IOException
с ошибкой 87 "Параметр неверен" при попытке установить параметры связи для последовательного порта.
System.IO.Ports.SerialPort
classне поддерживает этот случай, но есть и другие реализации, которые вы можете использовать.
Например, с библиотекой SerialPortStream (также доступной в NuGet ) вы можете открыть последовательныйCOM-порт без настройки параметров связи с использованием метода SerialPortStream.OpenDirect()
:
namespace Vurdalakov
{
using System;
using RJCP.IO.Ports;
class Program
{
static void Main(String[] args)
{
using (var serialPort = new SerialPortStream("COM1"))
{
serialPort.OpenDirect();
while (serialPort.IsOpen)
{
var ch = (Char)serialPort.ReadChar();
Console.Write(ch);
}
}
}
}
}