在C#中的DataGridView中的Foreach循环,任务和DataGridViewRows

时间:2015-11-23 14:53:56

标签: c# datagridview foreach task

我目前正在尝试为DataGrid中的每一行启动新任务。我目前的代码如下: -

ArrayList tasks = new ArrayList();

foreach (DataGridViewRow row in tblProduct.Rows)
{
    DataGridViewRow rowCopy = row;
    Task newTask = new Task(() =>
    {
        checkRow(rowCopy);
    });

    tasks.Add(newTask);
    newTask.Start();   
}

问题是,它跳到最后并在经过每一行之前停止。可以做些什么来允许每行运行一个任务?

修改

在没有Task的情况下测试循环,它按预期工作。不确定在启动任务时它为什么不起作用。

1 个答案:

答案 0 :(得分:0)

我不确定这是否得到了正确回答,但是对于未来的读者来说,问题是checkRow在任务可以执行任何操作之前正在更新,然后,checkRow的最后一个值是什么任务真正使用。为了避免这种情况,不要对所有任务使用相同的变量,而是将这些变量称为非共享变量:

ArrayList tasks = new ArrayList();

    foreach (DataGridViewRow row in tblProduct.Rows)

        {

            Task newTask = new Task(() =>
            {
                DataGridViewRow rowCopy = row;
                checkRow(rowCopy);
            });

            tasks.Add(newTask);
            newTask.Start();   
        }

或者,只使用parallel.foreach而不是任务