我有一个usb设备插在com3上作为串口。我用它打开端口:
string[] ports = SerialPort.GetPortNames();
foreach (string portName in ports)
{
try
{
var port = new SerialPort(portName, 256000);
port.Open();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
我在这里得到一个io异常“port com3不存在”。我使用VS2012 + Win7x64Pro。我试图重新启动Windows,一切正常,但只有一次。几天前我在VS2012 + Win8上运行这个项目,一切都很棒。它工作得很好,没有发现异常。我发现了大量类似的问题,但没有任何解决方案可以解决这个问题。有关更多信息:作为USB设备,我使用BlueGiga BLED112驱动程序版本“ble-1.1.1-71”。请解释一下我在哪里以及我做错了什么。
答案 0 :(得分:1)
蓝牙通常会创建无法实际打开的幻像虚拟串行端口。在更糟糕的情况下,它是配对的,并且驾驶员花一分钟时间寻找一个不存在的蓝牙配件,然后再打开。
其他串行设备可能无法正常响应(打开确实会改变多个串行引脚上的电压)。
解决方案:永远不要打开循环中GetPortNames
返回的所有串行端口。而是打开您的设备所连接的那个。 (您可以通过检查设备描述符字符串来了解这一点,或者在最坏的情况下,询问用户哪个列出的端口是正确的端口)
也许你只是想尝试使用蓝牙收音机?在那种情况下,你使用了错误的方法。与蓝牙关联的串行端口用于与自身标识为SPP(串行端口配置文件)的设备配对。不是为了操纵收音机。为此,您使用套接字API。见Bluetooth Programming with Windows Sockets。从C#开始,您需要使用one of the third-party libraries that wraps this stuff。