我正在尝试打开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必定存在问题。
答案 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)祝你好运!