오른쪽 스레드에서 타이머 스레드에서 실행 된 메서드를 호출해야합니다. Invoke/BeginInvoke 프로세스가 작동합니다. 데이터 교환을 위해 하나의 스레드 간 데이터 컨테이너를 공유하는 2 개의 스레드가 있습니다. 하나는 대기열을 채우고 하나는 대기열을 처리합니다. 빈 상태 후에 빈 채워지면 큐가 이벤트를 발생시킵니다. 모든 문제는 경과 된 이벤트에 새 스레드를 여는 타이머에 의해 발생합니다. Dispatcher를 사용하여 오른쪽 스레드로 디스패치하지만이 Dispatcher를 제외한 모든 것이 작동합니다. :-)C# 콘솔 응용 프로그램의 디스패처 관련 문제
제발, 문제가 어디 있는지 아시나요?
완전한 테스트 코드는 여기에서 있습니다 : http://pastebin.com/jqYbR9PS.
디버그 출력은 이것이다 :
App Thread ID: 9
Processor Thread ID: 10
Processor Dispatcher Thread ID: 10
The thread '<No Name>' (0x888) has exited with code 0 (0x0).
Processor QueueListener caller Thread ID: 12
Processor Dispatcher Thread ID: 10
Processor invoking ProcessQueue.
...here shut be processing output...
Processor invoked ProcessQueue.
App Thread ID on end: 9
The thread 'vshost.RunParkingWindow' (0x17c4) has exited with code 0 (0x0).
The thread '<No Name>' (0x820) has exited with code 0 (0x0).
The program '[5760] TestingConsoleApplication.vshost.exe: Managed (v4.0.30319)' has exited with code 0 (0x0).
ProcessQueue이 호출/호출되지 않습니다.
감사합니다.
개인적으로 필자는 이러한 유형의 작업 병렬 라이브러리를 특히 콘솔 응용 프로그램에서 사용합니다. 아마도 그것은 당신을위한 옵션입니까? –
다른 방법으로 타이머 이벤트 스레드를 기본 앱 스레드로 다시 가져 오는 방법이 있습니까? – Fanda
잘 읽으면 평행하게 작업을 수행하는 것이 좋습니다. :-) 내 작업은 데이터베이스 동기화 작업이므로 순차적으로 실행해야합니다. – Fanda