メインUIスレッドから処理するために、次のジョブを複数のスレッドに送信しました。すべてのジョブが完了したら、「ジョブが完了しました」というメッセージを発行して、完了したことをユーザーに知らせる必要があります。
LimitedTaskScheduler scheduler = new LimitedTaskScheduler(4);
TaskFactory factory = new TaskFactory(scheduler);
MessageBox.Show("Job started");
for (int i = 0; i < rows.Length; i++)
{
string tabName = rows[i]["TableName"].ToString();
int nStatus;
factory.StartNew<int>(() =>
{
nStatus = ProcessTable(tabName);
return nStatus;
});
}
MessageBox.Show("Job finished");
上記のコードでは、 MessageBox.Show("Job finished"); タスクが送信された直後に実行されますが、これは間違っています。Task.WaitAll(); を使用する場合 それは私が望んでいないメインのUIスレッドをロックします。
私の質問は、メインの UI スレッドをロックせずに、すべてのタスクが完了した後に「ジョブが終了しました」というメッセージを表示する最良の方法は何ですか?
前もって感謝します。