Ошибка "истекло время ожидания семафора" для USB-соединения

Я получаю эту ошибку...

Период ожидания семафора истек.

На этой линии...

ThePorts.ActivePort1.Open ();

... но я получаю это только время от времени. Когда это происходит, это происходит снова и снова. Тогда проблема исчезнет, ​​на несколько часов или дней, затем она вернется.

Последовательный порт - это USB с подключенным BlueTooth.

Я думаю, что у этого парня была очень похожая проблема, но не в C#

Заморозить на SerialPort.Open / DeviceIoControl / GetcommState с помощью 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
}

7 ответов

Эта ошибка может также появиться, если у вас есть задержки в сети или проблемы с Интернетом или локальной сетью. Мостиковые соединения, которые имеют неисправный аналог, также могут быть виновниками.

Хорошо, теперь я подключаюсь без проблемы тайм-аута семафора.

Если кто-то читает когда-либо сталкивается с тем же, я надеюсь, что эта процедура работает для вас; но никаких обещаний; эй, это окна.

В моем случае это была Windows 7

Я получил небольшой совет с этой страницы на eHow; не уверен, может ли это кому-нибудь помочь или нет.

Так или иначе, это была простая процедура из трех шагов, которая работала для меня

  • Нажмите на кнопку Пуск

  • Выберите Панель управления

  • На панели управления выберите "Диспетчер устройств".

  • В диспетчере устройств выберите контроллеры универсальной последовательной шины

  • На контроллерах универсальной последовательной шины нажмите маленький боковой треугольник

  • Я не могу предсказать, что вы увидите на вашем компьютере, но на моем я получил длинный выпадающий список

  • Начните расследование, чтобы выяснить, кто из этих членов этого списка является виновником...

    • На каждом члене раскрывающегося списка щелкните правой кнопкой мыши на имени

    • Откроется список, выберите Свойства

    • Время догадки: используя различные вкладки в верхней части открывшегося окна, угадайте, является ли это драйвером USB-адаптера, который душит ваши вещи с таймаутами семафоров

  • После того, как вы сделали правильное предположение, закройте окно свойств USB Root Hub Properties (но оставьте окно диспетчера устройств открытым).

  • Физически отключите все и вся от этого USB-концентратора.

  • Отключите его.

  • Верните указатель мыши на тот USB Root Hub в списке, который вы определили ранее.

  • Щелкните правой кнопкой мыши еще раз

  • Выберите Удалить

  • Пусть Windows сделает свое дело

  • Подожди немного

  • Выключите весь компьютер, если у вас есть время; некоторые говорят, что это требуется. Я думаю, что я ушел без этого.

  • Подключите концентратор USB обратно к разъему USB на ПК

  • Если список в диспетчере устройств мигает и делает несколько вспышек, это нормально.

  • Подключите разъем BlueTooth обратно к USB-концентратору

  • Пусть окна делают свое дело еще немного

  • В течение двух минут у меня снова был рабочий COM-порт, никаких таймаутов семафора.

Надеюсь, что это работает для всех, кто может иметь аналогичную проблему.

У меня была эта проблема также на двух разных компьютерах с Windows при общении с Arduino Leonardo. Надежное решение было:

  • Найдите COM-порт в диспетчере устройств и откройте свойства устройства.
  • Откройте вкладку "Настройки порта" и нажмите кнопку "Дополнительно".
  • Там снимите флажок "Использовать буферы FIFO (требуется 16550 совместимый UART) и нажмите OK.

К сожалению, я не знаю, что делает эта функция или как она влияет на эту проблему. После нескольких перезагрузок ПК и дюжины циклов подключения устройств это единственное, что надежно решило проблему.

У меня была аналогичная проблема, которую я решил, изменив настройки порта в драйвере порта (расположенном в Портах в диспетчере устройств), чтобы они соответствовали устройству, которое я использовал.

Для меня это было то, что было установлено неправильное значение Бит в секунду.

У меня была эта проблема с программой RealTerm, тогда я вошел в диспетчер устройств и просто отключил устройство Bluetooth, подключенное к порту COM3.

Слишком много больших файлов за один раз. Windows barfs. По сути, копирование заняло слишком много времени, потому что вы слишком много запрашивали у компьютера, а блокировка файлов была заблокирована слишком долго и установил флаг, флаг является ошибкой семафора.

Компьютер набился и подавился. Я видел, как оперативная память здесь постепенно заполнялась кешем в ОЗУ. Затем при заполнении подсистема остановилась с ошибкой семафора.

У меня есть обходной путь; копируйте или передавайте меньше файлов, а не один огромный блок. Разбейте его на наборы блоков и отправляйте файлы по одному, может быть, по нескольку за раз, но не всегда.

Ссылки:

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

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

Проблема с вашим кабелем, а не с вашим кодом или соединением, некоторые кабели предназначены для передачи энергии, только некоторые предназначены для передачи энергии и данных, мы должны увидеть эти типы кабелей.

Другие вопросы по тегам