2011-12-03 12 views
1

各タスクの後にUIが更新されるタスクのリストを完成させる必要があるタスクは順番に実行する必要があります。ループで実行され、各スレッドが終了した後にUIを更新する長時間実行する作業のパターンまたはソリューションが必要

私は指定されたデータベースへのn個の要求を処理する必要があるWPFアプリケーションを持っており、各タスクの後にタスクの結果でアプリケーションを更新する必要があります。

foreach(var task in tasks) 
{ 
    // create thread for task to hit a database 
    // update ui with result from the task 
} 

スレッドを使用せずにこれを行うと、すべてのタスクが完了し、各タスクが終了するまでアプリケーションがフリーズするまで、UIは更新されません。

UIはデータベース上で実行された各「タスク」の結果を示すデータグリッドに行を追加します。進捗状況の報告と

おかげで、

-bmm

答えて

2

BackgroundWorkerは、まさにこれを行います。 UserStateプロパティに必要なものを含めて、ProgressChangedイベントハンドラに適用することができます。

1

ContinueWithという便利なメソッドを持つ新しいTaskクラスを使用すると、現在のタスクが完了した後でさらに多くの作業をキューに入れることができます。参照:http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx

したがって、あなたのような流れを実現することができます。

  1. 初期アクションでインスタンス化タスク
  2. はGUI
  3. の更新を続け、次のタスク
  4. を続けるには、2
に戻ってください。
0

また、スレッドプールを使用することもできます。

ここに例があります。

 ThreadPool.QueueUserWorkItem(delegate 
     { 

      //Do something 

      //Update ui. 
      TextBox.Dispather.Invoke((Action)(() => 
      { 
       //Update the control 
      })); 

     }); 
関連する問題