在我的C#项目中,我必须打开一堆图像。
让我们说我们需要打开50.我的计划是创建10个任务,做一些事情,然后在创建下一个10个任务之前等待每个任务完成。
var fd = new OpenFileDialog
{
Multiselect = true,
Title = "Open Image",
Filter = "Image|*.jpg"
};
using (fd)
{
if (fd.ShowDialog() == DialogResult.OK)
{
int i = 1;
foreach (String file in fd.FileNames)
{
if (i <= 10) {
i++;
Console.WriteLine(i + ";" + file);
Task task = new Task(() =>
{
// do some stuff
});
task.Start();
}
else
{
Task.WaitAll();
i = 1;
}
}
}
}
Console.WriteLine("Wait for Tasks");
Task.WaitAll();
Console.WriteLine("Waited);
当i = 10时,代码不等待,最后它也没有等待。 有人知道如何解决它?
谢谢!
答案 0 :(得分:2)
Task.WaitAll期望Task
数组等待,您永远不会传入任何内容。以下更改将等待您启动的所有任务。
List<Task> tasksToWait = new List<Task>();
foreach (String file in fd.FileNames)
{
if (i <= 10) {
i++;
Console.WriteLine(i + ";" + file);
Task task = new Task(() =>
{
// do some stuff
});
task.Start();
tasksToWait.Add(task);
}
else
{
Task.WaitAll(tasksToWait);
tasksToWait.Clear();
i = 1;
}
}
这是上面代码中包含更改的代码片段
注意此答案不包含对您的设计选择及其可能存在的缺陷的批评。