C# 任务同步
我有一个算法是在tpl的任务中执行的 在每次迭代中,我都要执行一个事件处理程序,它更新winforms客户端中的进度条(通过mvp预设器)C# 任务同步,c#,synchronization,task,task-parallel-library,C#,Synchronization,Task,Task Parallel Library,我有一个算法是在tpl的任务中执行的 在每次迭代中,我都要执行一个事件处理程序,它更新winforms客户端中的进度条(通过mvp预设器) 问题是,在调试模式下,我首先看到的是执行主任务中的代码。此代码结束后,调试器转到内部任务。我如何同步它?我想在每次迭代中更新进度条。现在的效果是,我已经在datagridview中得到了算法结果,然后我看到了工作(更新)进度条:///p>我假设您是调度程序变量是UI同步上下文的任务调度程序实例,因此您只是试图通过使用任务API来保持一致,而不是直接使用控件/
问题是,在调试模式下,我首先看到的是执行主任务中的代码。此代码结束后,调试器转到内部任务。我如何同步它?我想在每次迭代中更新进度条。现在的效果是,我已经在datagridview中得到了算法结果,然后我看到了工作(更新)进度条:///p>我假设您是
调度程序
变量是UI同步上下文的任务调度程序
实例,因此您只是试图通过使用任务API来保持一致,而不是直接使用控件/窗口::调用
同步的唯一方法是调用t.Wait()
。这显然会阻止并行工作继续进行,直到调用Notify
完成,但如果确实需要将UI与进度同步,那么这是唯一的方法
public delegate void NotifyAboutIterationEnd(int iteration);
public event NotifyAboutIterationEnd Notify;
var task = Task.Factory.StartNew(() =>
{
foreach (..
{
var t = Task.Factory.StartNew(p =>
{
Notify(++index);
},CancellationToken.None,TaskCreationOptions.None,Scheduler);
foreach (..