我目前正在尝试为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的情况下测试循环,它按预期工作。不确定在启动任务时它为什么不起作用。
答案 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
而不是任务