C# 并行。Foreach与任务冲突

C# 并行。Foreach与任务冲突,c#,asynchronous,task-parallel-library,parallel.foreach,C#,Asynchronous,Task Parallel Library,Parallel.foreach,我正在以并行方式将图像上载到云: // Make a TaskFactory that will use the UI thread's context var uiFactory = new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext()); Parallel.ForEach(FinalFileNames, new ParallelOptions { MaxDegreeOfParallelism = 4 },

我正在以并行方式将图像上载到云:

// Make a TaskFactory that will use the UI thread's context
var uiFactory = new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext());

Parallel.ForEach(FinalFileNames,
    new ParallelOptions { MaxDegreeOfParallelism = 4 },
    path =>
    {
         count++;
         /* Calculate percentage of upload done */
         double iPercentDone = (int)(((float)count / iTotalFiles) * 100);

        // Send the progress report to the UI thread.
        uiFactory.StartNew(() =>
        UploadProgress.Value = iPercentDone;

        LblProgress.Content = count.ToString(CultureInfo.InvariantCulture)
                               + " file(s) uploaded from " + iTotalFiles +
                     " file(s)";
                        }
       });
我面临的问题是,当我这样做时,UI被阻塞。原因似乎是同一条线索

如果我将这个Parallel.ForEach包装在“Task.Factory.New”中,那么它将进行异步调用,这不是我的要求


请让我知道,如何解决UI阻止问题,以及如何不使调用异步。

并行。
从UI线程启动时,Foreach
将阻止UI线程直到完成,因此启动的任务将排队,但在UI线程返回其消息循环之前不会运行

一种方法是在另一个线程中使用
Task.run()
运行
Parallel.Foreach
,更好的方法是将async/wait与
IProgress


您是否尝试过Application.DoEvents();每次foreach之后?
并行。foreach
不适用于图像上传等IO绑定任务。一个类似的问题:@AdamHouldsworth-请查看编辑..我添加了uifactory定义..@Noseratio-但我看不出Parallel.Foreach有任何问题..我可以将其包装到任务..但问题就是我概述的..请建议您正确地需要在后台工作线程中运行Parallel.Foreach,为了避免阻塞UI线程,我认为这是一种异步方法,但我只想在上传文件后更新UI。如何实现在上传文件时不阻塞UI线程,这将使应用程序进入“无响应”状态。异步方法就是您所需要的。
wait Task.Run(()=>{Parallel.Foreach(…)})