Обработка элементов в несколько потоков: 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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д