我有一个UI程序,更新加载缓慢的项目。我成功地实现了并行加载项目,并在每个项目加载完成后立即显示该项目。但是,我想在加载时显示进度条,并在所有项目加载完成后隐藏它。
我可以记住所有任务并在它们上使用
我可以设置一个自制的同步机制 - 也许是一个从
有没有一种Tasks本地的方法来完成这个任务?
private void refreshButton_Click(object sender, EventArgs e)
{
foreach (var item in Items)
{
progressBar1.Visible = true;
Task.Factory
.StartNew(() => DoNonUiwork(item))
.ContinueWith(antedecent =>
{
UpdateUI(antedecent.Result);
if ( /* if what? */ )
{
progressBar1.Visible = false;
}
}
, TaskScheduler.FromCurrentSynchronizationContext());
}
}
我可以记住所有任务并在它们上使用
Parallel.WaitAll()
,但这样会阻塞UI线程,这不好。我可以设置一个自制的同步机制 - 也许是一个从
int itemsToUpdate = Items.Count()
开始的计数器,然后/* if what? */
变成--itemsToUpdate== 0
。它可以工作,但感觉不太像Task...有没有一种Tasks本地的方法来完成这个任务?