33

I'm getting this error...

The semaphore timeout period has expired.

On this line...

ThePorts.ActivePort1.Open();

...but I only get it from time to time. When it happens, it happens over and over again. Then the problem goes away, for hours or days, then it comes back.

The serial port is a USB with a BlueTooth connected.

I think this guy was having a very similar problem, but not in C#

Freeze on SerialPort.Open / DeviceIoControl / GetcommState with usbser.sys

As best I can estimate, I have read his entire problem, and the resulting comments, and the answer, but I really can't figure out which one fixed his problem, or if C# is significantly different from what he was experiencing.

Thanks for any help for the clueless. This is the actual code where it's happening.

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
}
4

5 回答 5

6

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

如果有人在阅读时遇到过同样的事情,我希望这个程序对你有用;但没有承诺;嘿,是窗户。

就我而言,这是 Windows 7

我从这个关于 eHow 的页面得到了一点提示;不确定这是否对任何人有帮助。

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

  • 点击开始按钮

  • 选择控制面板

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

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

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

  • 我无法预测你会在你的电脑上看到什么,但在我的电脑上我得到了一个很长的下拉列表

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

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

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

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

  • 一旦你做出正确的猜测,然后关闭 USB 根集线器属性窗口(但保持设备管理器窗口打开)。

  • 从该 USB 集线器物理断开任何东西。

  • 拔掉它。

  • 将鼠标指针返回到您之前确定的列表中的那个 USB 根集线器。

  • 再次右键单击

  • 选择卸载

  • 让 Windows 做它的事

  • 稍等片刻

  • 如果有时间,请关闭整个计算机;有人说这是必需的。我想我没有它就逃脱了。

  • 将 USB 集线器重新插入 PC 上的 USB 连接器

  • 如果设备管理器中的列表闪烁并发出几个闪光灯,没关系。

  • 将蓝牙连接器重新插入 USB 集线器

  • 让 windows 做更多的事情

  • 两分钟之内,我的 COM 端口又可以正常工作了,没有信号灯超时。

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

于 2012-12-25T19:05:11.670 回答
6

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

于 2016-11-11T21:00:04.390 回答
3

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

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

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

于 2017-04-29T22:08:11.373 回答
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

于 2019-07-20T19:38:04.947 回答
0

我有一个类似的问题,我通过更改端口驱动程序中的端口设置(位于设备管理器的端口中)来解决我正在使用的设备。

对我来说,设置了错误的每秒位数。

于 2020-06-04T15:59:03.483 回答