C# 串行端口上的软件占用和硬件占用之间的差异

C# 串行端口上的软件占用和硬件占用之间的差异,c#,serial-port,C#,Serial Port,我正在尝试检测是否有任何设备连接到串行端口!当我打开一个串行端口时,即使没有设备物理连接到该端口,也没有异常。我的猜测是,该端口可能被软件占用,但我如何检测它呢?事实上,您不需要任何东西“物理”连接到串行端口就可以打开它。无论何时,只要插入与您打开的参数相同的发送数据的内容,您就会开始接收数据 实际上,您可以使用超级终端或某些串行通信软件来测试这种行为。它也会起同样的作用 通过WMI,您可以查询以了解是否连接了特定硬件: ManagementObjectSearcher manObjSearch

我正在尝试检测是否有任何设备连接到串行端口!当我打开一个串行端口时,即使没有设备物理连接到该端口,也没有异常。我的猜测是,该端口可能被软件占用,但我如何检测它呢?

事实上,您不需要任何东西“物理”连接到串行端口就可以打开它。无论何时,只要插入与您打开的参数相同的发送数据的内容,您就会开始接收数据

实际上,您可以使用超级终端或某些串行通信软件来测试这种行为。它也会起同样的作用

通过WMI,您可以查询以了解是否连接了特定硬件:

ManagementObjectSearcher manObjSearch = new ManagementObjectSearcher("Select * from Win32_SerialPort");
ManagementObjectCollection manObjReturn = manObjSearch.Get();

foreach (ManagementObject manObj in manObjReturn)
{
    Console.WriteLine(manObj["DeviceID"].ToString());
    Console.WriteLine(manObj["Name"].ToString());
    Console.WriteLine(manObj["Caption"].ToString());
}

这是已知的装置吗?您知道通信参数:波特率、奇偶校验、停止位吗?我已经知道您的说法。但我需要检测端口是否被我的设备或软件占用?您的端口是物理端口还是虚拟端口?它是物理端口,我想将其内容包含在Com1中。但在这两种情况下,满足或断开的开放端口都会被授予,毫无例外,如果它是物理端口,并且您可以连接,那么任何应用程序都可以向它写入。如果您无法连接,就不能有任何应用程序写入它,因为它是物理的而不是虚拟的,必须有一个物理硬件连接到它。它触发异常的唯一方法是,如果您想打开端口,并且连接了某个(physycal)对象