작업자 스레드의 이벤트를 주기적으로 촬영하는 외부 구성 요소를 사용하고 있습니다. 내 이벤트 핸들러에서는 Dispatcher를 사용하여 주 스레드에서 일부 메소드를 호출합니다. 프로그램이 종료되고 외부 부품 폐기()의, 때로는 중단 (그리고 만 볼 수 및 작업 관리자에서 살해 할 수 있습니다) 프로그램 때, ... 잘 그러나작업 스레드가 주 스레드에서 호출하려고 할 때 교착 상태가 발생했습니다.
private void HandleXYZ(object sender, EventArgs e)
{
...
if(OnTrigger != null)
dispatcher.Invoke(OnTrigger, new TimeSpan(0, 0, 1), e);
}
작동합니다.
작업자 스레드가 디스패처 호출을 기다리는 동안 "구성 요소"가 주 스레드에서 이벤트가 반환 될 때까지 기다리고 있습니다 (Dispose() 메서드에 유지됨) 메인 스레드에 대한 언급 된 호출 (디스패처에서 멈 춥니 다 .Invoke-line).
당분간은 작동이 느려지지만 잘못된 것처럼 느껴지는 Invoke에 시간 초과를 추가하여 종료 문제를 해결했습니다. 이와 같은 작업을보다 명확하게 처리 할 수 있습니까? 메인 스레드가 종료되기 전에 다른 스레드의 작업에 시간이 걸릴 수 있습니까? 나는 "분리"종료하기 전에 경우에 시도했지만 발송자이기 때문에 그 (수) 프로그램이 종료 시작할 때 이미 대기, 도움이되지 않습니다
...
PS : 외부 구성 요소는 여기에 내가 소스 코드에 액세스 할 수 없다는 것을 의미합니다 ...
사용하십시오 문단 다음에 – Shai
많은 – Vedran