Я хочу прочитать список в форме.
Моя цель - позволить программе прочитать первые 3 строки, затем она должна спать несколько миллисекунд (случайно), а затем она должна использовать следующие 3 строки, пока не будут использованы все элементы списка.
Я пробовал так, но программа всегда проверяла весь список после задержки первых 3-х строк.
List<Task> Tasklist = new List<Task>();
List<ListViewItem> lit = new List<ListViewItem>();
int aktuellethreads = 0;
int maximalethreads = 3;
this.Invoke(new Action(() =>
{
foreach (ListViewItem itt in listView1.Items)
{
lit.Add(itt);
}
}));
foreach (ListViewItem i in lit)
{
if (aktuellethreads < maximalethreads)
{
Task t = Task.Run(() =>
{
Random rnd = new Random();
Thread.Sleep(rnd.Next(300, 10000));
});
Tasklist.Add(t);
aktuellethreads++;
}
if(aktuellethreads >= maximalethreads)
{
Task.WaitAny(Tasklist.ToArray());
aktuellethreads--;
}
}
listView1
доlit
, а затем повторяетlit
с задачами. Таким образом, в этих итерациях он будет перебирать первые 3 элемента только в начале, остальные будут перебираться, если какая-либо из задач освободится, одна за другой, а не партиями по 3. - person Dominik Szymański   schedule 05.06.2017Tasklist
иaktuellethreads
. Ну, даже нет, это не будет работать на 100%, потому что вы берете 4-й элемент как раз тогда, когда ждете завершения задачи. Я напишу правильный ответ через минуту. - person Dominik Szymański   schedule 05.06.2017