Ошибка "истекло время ожидания семафора" для 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/
Проблема с вашим кабелем, а не с вашим кодом или соединением, некоторые кабели предназначены для передачи энергии, только некоторые предназначены для передачи энергии и данных, мы должны увидеть эти типы кабелей.