실행하고 싶은 작업이 오래 있고 상태/진행 상태를 사용자 인터페이스에 알릴 수 있다고 해봅시다. 여기 잡기는 내가 원하는 UI가 모달 대화 상자이며, 작업을 시작하기 전에 UI를 표시 할 수 없으며 작업을 시작한 다음 표시 할 수도 있습니다.TPL 모달 대화 상자에서 TPL 작업 진행
시도 1 : 첫 공연 대화 상자가 다음 작업을 시작합니다
분명히 작동하지 않는 스레드가 ShowDialog를에서 차단ProgressDialog dlg = new ProgressDialog();
Task longRunningTask = CreateTask();
dlg.ShowDialog();
longRunningTask.Start();
Task.WaitAll(longRunningTask);
()를하고, 작업이 시작되지 않습니다.
시도 2 : 시작 작업, 다음 대화 보여
ProgressDialog dlg = new ProgressDialog();
Task longRunningTask = CreateTask();
longRunningTask.Start();
dlg.ShowDialog();
Task.WaitAll(longRunningTask);
을하지만이 시나리오에서 내가 작업, 또는 더 나쁜에서 처음 진행 이벤트 누락 위험이, 나는 "제기 된 공포의 크로스 스레드 예외가 InvokeRequired "는 false를 표시합니다. 첫 번째 이벤트는 생성되는 동안 진행 대화 상자에 도착하지만 아직 표시되었으므로 핸들이 없습니다.
대화 상자에 작업을 전달하고 대화 상자를 시작한다고 가정하지만,이 문제에 대한 우아한 해결책이 필요하지 않은 것처럼 느껴지십니까?
참조 http://stackoverflow.com/questions/3395379/tracking-progress-of-a-multi-step-task –