我收到这个错误...
The semaphore timeout period has expired.
在这条线上...
ThePorts.ActivePort1.Open();
...但我只是偶尔得到它。当它发生时,它会一遍又一遍地发生。然后问题消失了,持续数小时或数天,然后它又回来了。
串口是一个连接了蓝牙的USB。
我认为这个人遇到了非常相似的问题,但不是在 C# 中
Freeze on SerialPort.Open / DeviceIoControl / GetcommState with usbser.sys
据我所知,我已经阅读了他的整个问题,以及由此产生的评论和答案,但我真的无法弄清楚哪一个解决了他的问题,或者 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
}
最佳答案
好的,我现在正在连接,没有信号量超时问题。
如果任何阅读者遇到同样的事情,我希望这个过程对你有用;但没有 promise ;嘿,这是 window 。
在我的例子中,这是 Windows 7
我从 This page 得到一点提示关于eHow;不确定这是否对任何人有帮助。
所以无论如何,这是对我有用的简单的二十三步程序
点击开始按钮
选择控制面板
从“控制面板”中选择“设备管理器”
从设备管理器中,选择通用串行总线 Controller
在通用串行总线 Controller 中,单击侧面的小三角形
我无法预测您会在您的计算机上看到什么,但在我的计算机上我会看到一个长长的下拉列表
开始调查,查明此列表中的哪一个成员是罪魁祸首...
在下拉列表的每个成员上,右键单击名称
将打开一个列表,选择“属性”
猜测时间:使用打开的结果窗口顶部附近的各种选项卡,猜测这是否是 USB 适配器驱动程序正在用信号量超时阻塞你的东西
做出正确的猜测后,关闭 USB Root Hub 属性窗口(但让设备管理器窗口保持打开状态)。
物理断开 USB 集线器上的任何东西。
拔掉它。
将鼠标指针返回到您之前确定的列表中的那个 USB Root Hub。
再次右击
选择卸载
让 Windows 做它的事情
稍等一下
如果有时间,请关闭整个计算机;有人说这是必需的。我想我没有它就走了。
将 USB 集线器重新插入 PC 上的 USB 连接器
如果设备管理器中的列表闪烁并闪烁一些闪光灯,则没有关系。
将蓝牙连接器重新插入 USB 集线器
让 Windows 做更多事情
在两分钟内,我的 COM 端口再次可用,没有信号量超时。
希望它对其他可能遇到类似问题的人有用。
关于c# - USB 连接 "The semaphore timeout period has expired"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13999439/