Сегодня я сталкиваюсь с каким-то странным поведением. У меня есть последовательное устройство, к которому я обращаюсь, используя класс SerialPort
. Основное приложение имеет некоторый таймер, который опросает каждую секунду устройство для некоторого обновления состояния. В какой-то момент мне нужно сделать много времени на работу и, следовательно, не блокировать GUI, я использовал Backgroundworker
. Для доступа к одному и тому же последовательному устройству фоном требуется один раз. Иногда доступ иногда работает. Классический сценарий mutli-thread
. Поэтому я попытался использовать Mutex для функции, которая отправляет новую команду на последовательное устройство.C# несколько потоков и последовательная связь
Для последовательного устройства я все собрал в своем классе. В этом классе у меня есть функция sendCommand()
, которая записывает команду на устройство и использует AutoResetEvent
и событие OnDataReceived
для ожидания ответа. Функция sendCommand блокирует до получения ответа или тайм-аута. Затем я добавил Mutex
при вводе sendCommand и releaseMutex
во все возможные выходы. Все еще не работает.
Есть ли лучший способ справиться с этим?
Спасибо, Tobias
releaseMutex? Работа с C#? Просто оберните всю функцию внутри оператора lock()? –
Вы видите сообщение об ошибке или приложение блокируется в ожидании выхода мьютекса? –
Ваше устройство не поддерживает дуплексный канал? – Suhan