Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当最后一个任务完成时,如何停止进度条?_C#_Multithreading_Task Parallel Library - Fatal编程技术网

C# 当最后一个任务完成时,如何停止进度条?

C# 当最后一个任务完成时,如何停止进度条?,c#,multithreading,task-parallel-library,C#,Multithreading,Task Parallel Library,我有一个UI程序,可以更新缓慢加载的项目。我设法让项目并行加载,并在加载完成后立即显示每个项目。但是,我希望在加载时显示进度条,并在加载所有项目后将其隐藏 private void refreshButton_Click(object sender, EventArgs e) { foreach (var item in Items) { progressBar1.Visible = true; Task.Factory .

我有一个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()
,然后是
/*如果什么*/变为
--itemsToUpdate==0
。这很有效,但感觉不太像


是否有一种任务本机方式来完成此任务?

将您的
Parallel.WaitAll()
放在另一个任务中。

您可以使用此方法。或者使用,然后您可以将控件整理到UI线程。

您可以尝试启动另一个执行Task.WaitAll()的任务,并在之后通知您的UI

  • 创建父任务
  • 将所有任务附加到父任务
  • 在父延续中隐藏进度条

  • 当你开始一项任务时,只需增加一个计数器,当它完成时,减少它。当它达到0时,PB应该消失。您可以使用@HansPassant建议的变通方法,但请记住,您的任务在不同的线程中运行。不,计数保证在同一线程上运行。如果没有,那么更新PB也无法工作。我会在下面的链接中使用类似于@Alex Filipovici soultion的东西:[Alex Filipovici](),这使任务类似于异步\等待模式。