我有一个更新加载缓慢的项目的 UI 程序。我设法让项目并行加载,并在完成加载后立即显示每个项目。但是,我想在加载时显示进度条,并在加载所有项目后隐藏它。
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
. 它有效,但感觉不是很像任务......
有没有一种任务原生的方式来完成这个?