이더넷 카메라의 매개 변수를 구성하는 C# 응용 프로그램이 있습니다. 카메라는 서버 역할을하고 응용 프로그램은 클라이언트 역할을합니다.배경 작업자가 실행되지 않음
데이터 소켓 (양방향 통신)과 이미지 용 소켓으로 데이터/명령 통신을위한 소켓이 2 개 있습니다. 카메라는 이미지 소켓을 통해 이미지를 전송합니다 (단방향 통신). 하드웨어 트리거가 주어질 때마다 카메라가 이미지 소켓을 통해 이미지를 전송합니다 (하드웨어 트리거가 올 때 예측할 수 없음).
사용자는 GUI의 값을 변경하여 카메라를 구성 할 수 있습니다. 사용자가 매개 변수를 변경하면 응용 프로그램은 명령 소켓을 통해 명령과 데이터를 카메라로 보내고 응답을 기다립니다 (수신 제한 시간은 5 초입니다). 카메라는 명령을 수신하고 응답을 되돌려 보냅니다. GUI는 성공적으로 업데이트 된 사용자를 업데이트합니다.
이미지 소켓을 배경 작업자에 배치했습니다. 내부 무한 루프가 이미지 소켓의 이미지 폴링을 유지하고 이미지를 수신 할 때마다 GUI에 표시됩니다 (대리인을 사용하여 수행). 모두 잘 맞습니다 :)
이제 트리거가 카메라에 도달하면 이미지를 보냅니다. 사용자가 매개 변수를 변경하는 즉시, 응용 프로그램은 명령/데이터를 전송하고 응답을 기다립니다. 카메라는 이미지를 완전히 보낸 후에 만 명령을 수신합니다. 응용 프로그램이 명령에 대한 응답을 기다리고있을 때 백그라운드 작업자 (이미지를받는)가 실행 중이 지 않은 것입니다. 따라서 UI는 명령 소켓에서 응답을 기다리고 있으며 카메라는 이미지 소켓에 이미지를 보내고 UI는 백그라운드 작업자가 실행되고 있지 않아 이미지를받지 못합니다. 교착 상태가되어 명령 소켓에서 시간 초과 (5 초)가 발생합니다.
소켓이 시간 초과 대기 중일 때 backgroundworker가 실행되지 않는 이유 백그라운드 작업자를 스레드로 교체하고 우선 순위를 다음과 같이 설정했습니다. 가장 높은. 오류 (시간 초과) 주파수가 내려왔다,하지만 동일한 문제가 occasionaly 발생합니다. 당신들의 날이 정렬하고 나에게 문제를 이해하는 데 도움이 도움이 될 수 있습니다.
감사합니다, 비슈누
이것은 효과가 있습니다. Johnan Bias 고맙습니다. – Vishnu