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

C# 无法在.NET中打开串行端口,c#,.net,serial-port,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(); 如果调用Serial

我试图打开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肯定有问题。

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

编辑:Wops,所以转义my\所以应该是这样的(ommit空格):
“\\.\\COM1”

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

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();
我还遇到了串行通信和Microsoft Active Sync的问题。我不确定您是否正在运行此程序,但可能值得尝试将其杀死(任务管理器中的进程名为wcescomm.exe)。希望有帮助


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

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

可能是后台运行的某个应用程序打开了您的端口(请参见此)


下载并使用“查找”菜单上的“查找句柄或DLL”查找com端口打开的进程。在我的例子中,spoolsv.exe始终使用COM1、COM3端口。所以我用了另一个com端口(COM2)祝你好运

我知道有时
GetPortNames()
会给出一些不可靠的字符。超级终端有效吗?如果我这样做,我会得到一个异常,说明COM端口不能以\开头。您可以(在本例中)忽略对.PortName的调用,因为它被设置为“COM1”默认情况下是内部的。还有数据位和停止位。谢谢——我花了两个小时试图解决这个问题!您是如何更改的?@JohnDemetriou,更改打印机端口可能会因您使用的Windows版本而异。我建议用谷歌搜索你的Windows版本的答案。