2011-02-24 107 views
0

我有一個算法在tpl的任務中執行。任務同步

從每次迭代欲執行的事件處理程序,其更新Winforms中的客戶端(throught 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變量是TaskScheduler實例的UI同步上下文,所以你是隻是試圖通過使用任務API是一致的,而不是直接使用Control/Window::Invoke

同步的唯一方法是撥打t.Wait()。這顯然會阻止你的並行工作繼續進行,直到完成對Notify的調用,但是如果你確實需要將UI與進度同步,那麼這是唯一的方法。