【发布时间】:2014-03-12 16:44:37
【问题描述】:
运行以下代码会锁定我的 com 端口,我很想知道原因。我在 SO 上发现了几个类似的未回答问题...
我正在使用蓝牙适配器 (RN-41) 进行串行连接。适配器 SPP 创建两个虚拟 com 端口(这对我们测试过的所有适配器都是通用的)。 Windows 将它们标记为 Incoming 和 Outgoing,但 Incoming 是唯一实际携带串行数据的。
这给我留下了“额外的”虚拟串行端口。我用可用的 Com 端口填充了一个下拉列表,以便用户可以从列表中选择要连接的端口。
在此之前,我正在过滤该列表以删除“假”com 端口。这是我的代码:
public string checkBluetoothCom()
{
string bluetoothComm = "";
List<string> badComPorts = new List<string>();
ManagementClass processClass = new ManagementClass("WIN32_SerialPort");
ManagementObjectCollection Ports = processClass.GetInstances();
foreach (ManagementObject property in Ports)
{
if (property.GetPropertyValue("Name").ToString().Contains("Bluetooth"))
{
string hardwareAddress = property.GetPropertyValue("PNPDeviceID").ToString().Split('&')[4].Split('_')[0];
if (!hardwareAddress.All(c => c == '0'))
{
bluetoothComm = property.GetPropertyValue("DeviceID").ToString();
}
else
{
badComPorts.Add(property.GetPropertyValue("DeviceID").ToString());
}
}
}
Console.WriteLine("Removing {0} items from comm port list", badComPorts.Count);
ports.RemoveAll(item => badComPorts.Contains(item));
return bluetoothComm;
}
问题是,在此运行后,我的 Com 端口锁定,我无法建立任何连接,直到我移除蓝牙适配器并重新启动远程设备 (RN-41)。有什么想法吗?
【问题讨论】:
-
可能是因为这是一个同步查询。在查询
win32_LogicalDisk时,USB 安装也会发生同样的情况。您可能需要切换到异步 WQL 查询。 msdn.microsoft.com/en-us/library/cc143292.aspx -
这是正确的@David-SkyMesh。如果您将其添加为答案,我会接受。并感谢您的指导,非常有帮助!
-
@MatthewHilgenfeld 您能否提供执行异步查询并解决问题的代码?
标签: c# .net bluetooth serial-port wmi