【发布时间】:2012-12-09 13:59:07
【问题描述】:
我收到此错误...
信号量超时期限已过。
在这条线上……
ThePorts.ActivePort1.Open();
...但我只是偶尔会得到它。当它发生时,它会一遍又一遍地发生。然后问题消失了,几个小时或几天,然后又回来了。
串行端口是连接蓝牙的 USB。
我认为这家伙遇到了一个非常相似的问题,但不是在 C# 中
Freeze on SerialPort.Open / DeviceIoControl / GetcommState with usbser.sys
尽我所能估计,我已经阅读了他的整个问题,以及由此产生的 cmets 和答案,但我真的无法弄清楚是哪一个解决了他的问题,或者 C# 是否与他所经历的有很大不同.
感谢您对无知者的任何帮助。这是实际发生的代码。
public static void Open_ActivePortWeWillUse(String Drone_StringNameFromUser)
{
SerialPort TempSerialPort = new SerialPort(Drone_StringNameFromUser, (int) SerialPortSpeed);
ThePorts.ActivePort1 = TempSerialPort;
ThePorts.ActivePort1.DataBits = 8;
ThePorts.ActivePort1.Parity = Parity.None;
ThePorts.ActivePort1.StopBits = StopBits.One;
ThePorts.ActivePort1.DataReceived += new SerialDataReceivedEventHandler(OurBackGroundSerialPortReceiver);
ThePorts.ActivePort1.Open(); // "Sometimes" Error hits here
}
【问题讨论】:
-
这是一个低级 Windows 错误,ERROR_SEM_TIMEOUT,错误代码 121。高度特定于使用信号量的代码。 .NET SerialPort 类不在任何地方使用信号量。您正在使用的模拟串行端口的蓝牙驱动程序肯定正在使用一个,它是本机代码中使用的常见同步对象。有错误的驱动程序出现这类问题并不罕见。
-
除了之前的评论:在您正在工作的级别(.NET 客户端)上,您无法使用有缺陷的串行端口驱动程序做任何事情。在您链接的帖子中,真正的答案在 cmets 中:“问题源于设备的固件故障”。
-
谢谢汉斯和亚历克斯。不知道我是否找到了答案,但我 THINK 这个页面((eHow Page On Misbehaving USB hubs)) 解释了该怎么做。虽然这不是我在整个互联网上最喜欢的,但如果它给了我答案,那就好了;随便。
-
3 小时后仍然可以。我应该发布答案吗?
标签: c# serial-port usb semaphore usbserial