在 C# 中访问 COM10 或更大的端口 [英] Accessing COM10 or greater port in C#

查看:71
本文介绍了在 C# 中访问 COM10 或更大的端口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using Visual Studio 2010 and programing in C# (.NET 3.5).

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

I want to write/read data from 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);
}

每当我在 SerialPort Port = new SerialPort(Portname,9600,.....); 中使用 Portname 作为COM10"时,它都会给出一个错误为

Whenever I use Portname as "COM10" in SerialPort Port = new SerialPort(Portname,9600,.....);, it gives an error as

端口'COM10'不存在

The port 'COM10' does not exist

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

On Port.Open(), it should not even reach to command Port.Open() if COM10 doesn't exist.

另一种方式,我尝试将 Portname 设为\.\COM10".它给出了一个错误

Another way, I tried Portname as "\.\COM10". It gives an error as

给定的端口名称不以 COM/com 开头或未解析为有效的串行端口.

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

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

This happens with any port number greater than COM9.

有出路吗?

推荐答案

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

The reason why you can't open a serial port greater than 10 is because FCL SerialPort implemented like in the following sample:

[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 组件.

As you see, standard SerialPort does not allow you to use \\.\ notation in the port name. And I don't know why they did this. With \\.\ notation, ports greater than 10 can be opened. So, the only way is to implement your own SerialPort component.

这篇关于在 C# 中访问 COM10 或更大的端口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆