gpt4 book ai didi

c# - 在 C# 中访问 COM10 或更高端口

转载 作者:太空狗 更新时间:2023-10-29 23:53:35 24 4
gpt4 key购买 nike

我正在使用 Visual Studio 2010并使用 C# (.NET 3.5) 进行编程。

我想从 COM10 写入/读取数据。

下面是简单的代码:

static void Main(string[] args)
{
String Portname = String.Empty;

/* List out all COM ports present on the computer. */
foreach (string ports in SerialPort.GetPortNames())
{
Console.WriteLine(ports);
/* If COM10 exists, copy the name for further use. */
if (ports == "COM10")
{
Portname = ports; //I also tried this: "\\.\\COM10";
}
}
/* If COM10 not found, return */
if (Portname == String.Empty)
{
Console.WriteLine("Exiting");
return;
}

SerialPort Port = new SerialPort(Portname,
9600, // Baudrate
Parity.None, //Parity
8, //DataBits
StopBits.One); //Stop Bits

Port.Open();

for (int count = 0; count < 5; count++)
{
Port.WriteLine("\nHello");
}
Port.Close();

while (true);
}

每当我使用 Portname作为 SerialPort Port = new SerialPort(Portname,9600,.....); 中的“COM10” , 它给出了一个错误

The port 'COM10' does not exist

关于 Port.Open() , 它甚至不应该到达命令 Port.Open()如果 COM10 不存在。

另一种方式,我尝试将 Portname 作为“\.\COM10”。它给出了一个错误

The given port name does not start with COM/com or does not resolve to a valid serial port.

任何大于 COM9 的端口号都会发生这种情况。

有出路吗?

最佳答案

打不开大于10的串口是因为FCL SerialPort的实现方式如下例:

[MonitoringDescription("PortName")]
[Browsable(true)]
[DefaultValue("COM1")]
public string PortName
{
[TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get
{
return this.portName;
}
set
{
if (value == null)
throw new ArgumentNullException("PortName");
if (value.Length == 0)
throw new ArgumentException(SR.GetString("PortNameEmpty_String"), "PortName");
if (value.StartsWith("\\\\", StringComparison.Ordinal))
throw new ArgumentException(SR.GetString("Arg_SecurityException"), "PortName");
if (this.IsOpen)
throw new InvalidOperationException(SR.GetString("Cant_be_set_when_open", new object[1]
{
(object) "PortName"
}));
else
this.portName = value;
}
}

如您所见,标准 SerialPort 不允许您在端口名称中使用\\.\符号。我不知道他们为什么这样做。使用\\.\表示法,可以打开大于10的端口。因此,唯一的方法是实现您自己的 SerialPort 组件。

关于c# - 在 C# 中访问 COM10 或更高端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4677127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com