USB连接的“信号量超时时间已过期”错误

时间:2012-12-22 02:07:49

标签: c# serial-port usb semaphore usbserial

我收到了这个错误...

  

信号量超时期限已过期。

在这一行......

  

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
}

5 个答案:

答案 0 :(得分:6)

如果您遇到网络延迟或互联网或本地网络问题,也可能出现此错误。具有失败对应物的桥接连接也可能是罪魁祸首。

答案 1 :(得分:5)

好的,我现在正在连接而没有信号量超时问题。

如果有人读过同样的东西,我希望这个程序适合你;但没有承诺;嘿,它的窗户。

在我的情况下,这是Windows 7

我在eHow上从This page得到了一点提示;不确定这是否可以帮助任何人。

所以,无论如何,这是对我有用的简单的二十三步程序

  • 点击开始按钮

  • 选择“控制面板”

  • 从“控制面板”中,选择“设备管理器”

  • 从“设备管理器”中,选择“通用串行总线控制器”

  • 从通用串行总线控制器中,单击小侧面三角形

  • 我无法预测您在计算机上会看到什么,但在我的计算机上,我会得到一个很长的下拉列表

  • 开始调查,找出这个名单中哪一位成员是罪魁祸首......

    • 在下拉列表的每个成员上,右键单击名称

    • 将打开一个列表,选择“属性”

    • 猜测工作时间:使用打开的结果窗口顶部附近的各个选项卡,猜猜这是否是使用信号量超时阻塞你的东西的USB适配器驱动程序

  • 一旦做出正确猜测,然后关闭USB Root Hub Properties窗口(但保持设备管理器窗口打开)。

  • 从USB集线器中物理断开任何事物和所有内容。

  • 拔掉它。

  • 将鼠标指针返回到您之前确定的列表中的USB Root Hub。

  • 再次右键单击

  • 选择卸载

  • 让Windows做自己的事

  • 等一会儿

  • 如果你有时间,请关闭整台电脑;有人说这是必需的。我想我没有它就离开了。

  • 将USB集线器插回PC上的USB接口

  • 如果设备管理器中的列表闪烁并闪烁一些闪光灯,那就没关系。

  • 将蓝牙连接器插回USB集线器

  • 让Windows再做一件事

  • 在两分钟内,我再次使用了一个有效的COM端口,没有信号量超时。

希望它适用于任何可能遇到类似问题的人。

答案 2 :(得分:2)

在与Arduino Leonardo通信时,我在两台不同的Windows计算机上遇到了这个问题。可靠的解决方案是:

  • 在设备管理器中找到COM端口并打开设备属性。
  • 打开"端口设置"选项卡,然后单击高级按钮。
  • 在那里,取消选中框"使用FIFO缓冲区(需要16550兼容的UART),然后按OK。

不幸的是,我不知道这个功能的作用,或者它如何影响这个问题。经过几次PC重启和十几个设备连接周期后,这是唯一能够可靠地解决问题的方法。

答案 3 :(得分:0)

一次只能存储太多大文件。 Windows Barfs。从本质上讲,复制花费的时间太长,因为您要求使用过多的计算机,并且文件锁定被锁定的时间太长,并且将标志设置为关闭,因此该标志是信号灯错误。

计算机塞满并被塞住。我看到这里的RAM内存逐渐被RAM中的缓存填充。然后,在将子系统接地填充为停止时,出现信号量错误。

我有一个解决方法;复制或传输更少的文件而不是一个巨大的块。将其分解为几组块,然后一次发送一个文件,一次发送几个,但不是很多。

参考文献:

https://appuals.com/how-to-fix-the-semaphore-timeout-period-has-expired-0x80070079/

https://www-01.ibm.com/support/docview.wss?uid=swg21094630

答案 4 :(得分:0)

我遇到了类似的问题,可以通过更改端口驱动程序(位于设备管理器中的端口中)中的端口设置以适合我使用的设备来解决。

对我来说,是错误的每秒比特数设置。