Обработка элементов в несколько потоков: ThreadPool или еще варианты? - C#
Формулировка задачи:
Во общем дело такое: Есть listview в нем N итемов, мне нужно пройтись по каждому взять данные каждого итема и записать их в файл, и хочу это сделать через потоки, но как сделать не могу понять...
Потоков должно быть 20 максимум и нужно что бы было так:
Первый поток берет первый итем и работает с ним.
Второй поток берет второй итем и работает с ним.
...
Десятый поток берет десятый итем и работает с ним.
И вот после этого нужно как то сделать так что б если первый поток закончит обработку своего итема он не брал тупо следующий а брал итем который еще не обработан и не находится в процессе обработки другим потоком.
пока что единственное что придумал по этому пункту - сделать свойство итема и когда поток начинает обработку итема, то ставит свойство в состояние "Processing", а по завершению "Completed", и тогда другие потоки не будут трогать итемы которые в процессе обработки или уже обработаны. Если кто знает лучше вариант напишите.
Ну а вот с самими потоками мне нужна помощь ибо не знаю как это сделать через ThreadPool так что б все было нормально и без косяков...
Решение задачи: «Обработка элементов в несколько потоков: ThreadPool или еще варианты?»
textual
Листинг программы
listBox1.Items.Add("Begin...");
ProcessingBegin();
int threadsCount = 10;
new Thread(() =>
{
for (int i = 0; i < threadsCount; i++)
{
Thread t = new Thread(() =>
{
foreach (ListViewItem item in items)
{
Thread.Sleep(2000);
Invoke((Action)(() =>
{
item.SubItems[3].ForeColor = Statuses.Success.Color;
item.SubItems[3].Text = Statuses.Success.Message;
}));
}
});
t.Start();
t.Join();
}
Invoke((Action)(() =>
{
ProcessingEnd();
listBox1.Items.Add("End...");
}));
}).Start();