2011-02-24 7 views
0

나는 tpl에서 작업으로 실행되는 알고리즘을 가지고 있습니다. 내가 윈폼 클라이언트 (축복하는 MVP의 preseter)에서 진행 표시 줄이작업 동기화

public delegate void NotifyAboutIterationEnd(int iteration); 

public event NotifyAboutIterationEnd Notify; 

var task = Task.Factory.StartNew(() => 
    { 
     foreach (.. 
     { 
var t = Task.Factory.StartNew(p => 
              { 
               Notify(++index); 
              },CancellationToken.None,TaskCreationOptions.None,Scheduler); 
      foreach (.. 

문제는 갱신 이벤트 핸들러를 실행하려는 각 반복에서

는 것을 디버그 모드에서 나는 처음부터 코드를 실행 참조 주요 과제. 이 코드가 끝나면 디버거는 내부 작업으로 이동합니다. 어떻게 동기화 할 수 있습니까? 각 반복에서 진행률 막대를 업데이트하고 싶습니다. 이제 결과는 DataGridview의 알고리즘 결과를 얻은 다음 진행률 표시 줄 작업 (업데이트)을 보았습니다./

답변

0

Scheduler 변수가 UI 동기화 컨텍스트의 TaskScheduler 인스턴스라고 가정합니다. 그냥 그냥 Control/Window::Invoke을 사용하여 작업 API isntead를 사용하여 일관성을 유지하려고합니까?

동기화하는 유일한 방법은 t.Wait()입니다. 이것은 분명히 Notify에 대한 호출이 완료 될 때까지 병렬 작업이 계속되는 것을 막을 것입니다.하지만 UI가 진행 상황과 동기화되어야 할 필요가 있다면 이것이 유일한 방법입니다.

관련 문제