У меня есть приложение C #, с помощью которого я настраиваю параметры камеры Ethernet. Камера действует как сервер, а приложение - как клиент.
Имеется 2 гнезда для связи, одно для передачи данных / команд - гнездо данных (двухсторонняя связь) и другое гнездо для изображения, камера отправляет изображение через гнездо изображения (односторонняя связь). Камера отправляет изображение через гнездо изображения всякий раз, когда ему дается аппаратный триггер (не предсказуемо, когда произойдет аппаратный триггер).
Пользователь может настроить камеру, изменив значения в графическом интерфейсе. Когда пользователь изменяет параметр, приложения отправляют команду и данные на камеру через командный сокет и ждут ответа (Тайм-аут приема составляет 5 секунд). Камера получает команду и отправляет ответ обратно. GUI получает, что он обновляет пользователя, который успешно обновил.
Я поместил сокет изображения в фоновый рабочий. В бесконечном цикле while он опрашивает изображение в сокете изображения, и всякий раз, когда изображение получено, оно отображается в графическом интерфейсе (для этого я использую делегата). Все хорошо :) 1007 *
Теперь, когда на камеру пришел триггер, он отправил изображение. В тот же момент, когда пользователь изменяет параметр, приложение отправляет команду / данные и ожидает ответа. Камера получит команду только после полной отправки изображения. Что происходит, так это то, что фоновый работник (который получает изображение) не работает, когда приложение ожидает ответа на команду. Итак, пользовательский интерфейс ожидает ответа в командном сокете, а камера отправляет изображение в графический сокет, а пользовательский интерфейс не получает изображение, так как фоновый рабочий не запущен. Это становится тупиком, и время ожидания (5 секунд) происходит в командном сокете: (.
Почему фоновый работник не работает, когда сокет ожидает тайм-аут?
Я заменил фоновый рабочий потоком и установил приоритет как самый высокий. Частота ошибки (тайм-аута) снизилась, но иногда возникает та же проблема. Любой из вас, ребята, может помочь мне разобраться в этом и помочь мне понять проблему.
Спасибо,
Вишну