【问题标题】:C# SerialPort#Open() method throws ArgumentException because of port name?C# SerialPort#Open() 方法由于端口名称而引发 ArgumentException?
【发布时间】:2012-07-23 01:29:01
【问题描述】:

在我的本地机器上,

  • Windows XP
  • 端口(COM 和 LPT)
    • COM3
    • RIM 虚拟串行端口 v2 (COM4)
    • RIM 虚拟串行端口 v2 (COM5)

以下代码,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;

namespace OpenSerialPortTest
{
    class Test
    {
        static void Main(string[] args)
        {
            foreach (String serialPortName in SerialPort.GetPortNames())
            {
                SerialPort serialPort = new SerialPort(serialPortName);
                try
                {
                    serialPort.Open(); // Line 19
                    Console.WriteLine(serialPort.PortName);
                }
                catch (Exception ex1)
                {
                    Console.WriteLine(ex1);
                    try
                    {
                        serialPort.Close();
                    }
                    catch (Exception ex2)
                    {
                        Console.WriteLine(ex2);   
                    }
                }
            }
            Console.ReadLine();
        }
    }
}

会抛出以下ArgumentException

也就是说,

给定的端口名称不以 COM/com 开头或不解析为 一个有效的串口。

有人知道为什么会这样吗?

【问题讨论】:

  • 先检查端口是否已经打开!
  • @AhmedGhoneim, IsOpen 返回false
  • 很酷,所以请在打开之前致电serialPort.Close();,试试吧:)

标签: c# serial-port argumentexception virtual-serial-port


【解决方案1】:

看看 http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/35954173-2eeb-46af-bb3e-86840c6b5484

似乎问题在于那些 COM 端口被映射到其他东西并给出了这个奇怪的错误作为响应。

我遇到了完全相同的问题。我发现我有一个 Windows 打印机设置来使用相同的端口。一旦我更改了打印机设置中的端口,SerialPort.Open() 就起作用了。

【讨论】:

  • 是的,但是我将它硬编码一次到 COM5 并且我看到了同样的问题。
  • 当我这样做时,我得到COM3COM4COM5
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 2019-04-03
相关资源
最近更新 更多