无法在.NET中打开串行端口

时间:2009-11-18 21:42:47

标签: c# .net serial-port

我正在尝试打开COM1,但每次拨打SerialPort.Open()时都会收到一个奇怪的错误。

错误是:

  

给定的端口名称不以COM / com开头,也不会解析为有效的串行端口。   参数名称:portName

代码非常简单:

SerialPort port = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);
port.Handshake = Handshake.RequestToSend;
port.Open();

如果我调用SerialPort.GetPortNames(),它将返回一个名为“COM1”的端口。

我已经确认我的计算机上有“COM1”,而且我没有在任何其他应用程序中使用它。当我在另一台计算机上运行代码时,它可以工作。我的系统正在运行Windows Vista。 .NET的版本是2.0。

是否有安全设置我必须在某处更改?我以管理员身份登录,并关闭了UAC。


更多信息

我使用了Process Explorer并确认没有使用\ Device \ Serial0。


解决方法

我安装了一个USB串口适配器(COM3),它工作正常。去搞清楚。 COM1必定存在问题。

4 个答案:

答案 0 :(得分:5)

我也有这个问题。事实证明我有一台打印机设置使用我试图打开的COM端口。一旦我将打印机更改为使用另一个端口,端口就打开了。

答案 1 :(得分:1)

尝试使用符号\。\ COMX而不仅仅是COMX。 确保您转义字符:      “\\。\ COM1”

编辑:Wops,SO逃脱我的\所以它应该像这样(省略空格):       “\ \ \ \。\ \ COM1”

答案 2 :(得分:1)

您可以尝试设置端口的属性,而不是使用构造函数。

mPort = new System.IO.Ports.SerialPort();
if(mPort.IsOpen)
{
   mPort.Close();
}
mPort.PortName = "COM1";
mPort.BaudRate = 19200;
mPort.Parity = Parity.None;
mPort.DataBits = 8;
mPort.StopBits = StopBits.One;
mPort.Handshake = Handshake.RequestToSend; // Handshake.None;
mPort.Open();

我也遇到过Serial comm和Microsoft Active Sync的问题。我不确定你是否有这个运行,但它可能值得一枪杀死它(任务管理器中的进程名称是wcescomm.exe)。希望有所帮助。

您还可以尝试使用Marshal.GetLastWin32Error()来查看某些低级别是否导致问题?我不确定这是否能为您提供更多信息。

答案 3 :(得分:1)

可能是在后台运行的某些应用程序可能已打开您的端口(请参阅此question)。

下载Process Explorer并使用"查找句柄或DLL"在“查找”菜单上查找打开COM端口的进程。在我的情况下,spoolsv.exe总是使用COM1,COM3端口。所以我使用另一个COM端口(COM2)祝你好运!