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