2011-08-12 3 views
1

해결책을 많이 찾았지만 찾을 수 없습니다. 여러 장치에서 비디오 스트림을받는 서버 응용 프로그램 (.NET)이 있습니다. 스트림을 디코드하고 처리하기 위해 사용하는 라이브러리는 스레드로부터 안전하지 않습니다. 내 라이브러리의 이름은 VideoProcessor 클래스가있는 "VideoProcessor"입니다.이벤트 처리기 메서드에서 고유 한 객체 이름을 사용하는 클래스 인스턴스화

제 주 프로그램에서 각 장치에 대한 VideoProcessor의 인스턴스를 만들고 싶습니다. 내 첫 번째 접근 방식은 새 장치에 대한 VideoProcessor를 인스턴스화하는 연결 이벤트 처리기를 사용하는 것이 었습니다. 그러나 둘 이상의 장치가 연결을 시도 할 때 절대로 작동하지 않습니다. 아래의 코드를 참조하십시오 : 당신이 볼 수 있듯이, 나는 새로운 장치가 연결 장해마다 덮어 쓰게됩니다

static void HandleVideoConnectionEvent(int port, string deviceId) 
{ 
     VideoProcessor vid = new VideoProcessor(port, deviceId); 

    } 

. 나는 아이디어가 부족하다. 각 장치에 대해 VideoProcessor를 별도로 실행해야하며 어떤 장치가 어떤 인스턴스에 사용되고 있는지 추적해야합니다. 나의 마지막 희망은 새 장치 연결을위한 새로운 프로세스를 생성하고 deviceID와 해당 PID 목록을 유지하는 것입니다 (.NET에서 이것이 가능할 지 모르겠습니다). 도와주세요. 이것을하기위한 깔끔한 방법이 있어야합니다. 많은 시간을 할애 해 주셔서 대단히 감사합니다.

감사합니다.

+0

그래서 VideoProcessor 객체의 풀을 손에 넣으라고 요청합니까? 그런 다음 비디오 프로세서 유형 중 <> 목록을 가져 와서 모든 객체를 유지하십시오. 이 풀 목록을 추적 할 관리자가 필요합니다. – Zenwalker

답변

0

사용은 Dictionary class :

static Dictionary<string, VideoProcessor> processors = 
     new Dictionary<string, VideoProcessor(); 

static void HandleVideoConnectionEvent(int port, string deviceId) 
{ 
    processors.Add(deviceId, new VideoProcessor(port, deviceId)); 
} 

그런 다음 당신은의 DeviceID하여 VideoConnection 클래스를 조회 할 수 있습니다. 예를 들면 :

물론
static VideoProcessor GetVideoProcessor(string deviceId) 
{ 
    return processors[deviceId]; 
} 

, 당신의 DeviceID 이미 사전이 고유 키, 또는 고유 deviceIds하고, 결정을해야합니다 (사전에 존재하지 않는 것을 확인하고 같은 정신 검사를 수행해야합니다 사전에서 가져 오려고 할 때 deviceId가 실제로 존재하는지 확인하십시오.

+0

크리스토퍼 감사합니다! 나는 너의 제안을 사용했다. – RH2011

관련 문제