Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 19.07.2013
Сообщений: 126

Несколько BackgroundWorker потоков

21.04.2017, 09:16. Показов 6700. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Возникла проблема с потоками BackgroundWorker. Есть код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
        static BackgroundWorker bw2 = new BackgroundWorker();
 
        private void button1_Click(object sender, System.EventArgs e)
        {
       
                //новый поток
                bw2.WorkerReportsProgress = true;
                bw2.WorkerSupportsCancellation = true;
                bw2.ProgressChanged += new ProgressChangedEventHandler(bw2_ProgressChanged);
                bw2.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw2_RunWorkerCompleted); //обработчик 
                bw2.DoWork += new DoWorkEventHandler(CHECK_DoWork);
                if (bw2.IsBusy != true)
                         bw2.RunWorkerAsync();
                
            }
        }
 
       public void CHECK_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
 
 
                string uriString = "http://сайт/check.php";
                WebClient myWebClient = new WebClient();
 
 
                for (int i = 0; i < listBox2.Items.Count; i++) //запускаем цикл для авторизации каждой пары титул:код
                {
                    int percentage = (i + 1) * 100 / listBox2.Items.Count;
                    bw2.ReportProgress(percentage);
                    Thread.Sleep(100);
 
                    string tex = listBox2.Items[i].ToString();
                    Char delimiter = ':';
                    String[] substrings = tex.Split(delimiter); //разделяем титул:код в разный массив
 
                    NameValueCollection myNameValueCollection = new NameValueCollection();
                    myNameValueCollection.Add("title", substrings[0]);
                    myNameValueCollection.Add("code", substrings[1]);
 
                    byte[] responseArray = myWebClient.UploadValues(uriString, myNameValueCollection);
 
                    var UpdExp = new Regex(@"Content-Length: 56\d*");//ищем в строке login
                    string upDate = UpdExp.Match(myWebClient.ResponseHeaders.ToString()).Value;
 
                    if (upDate.ToString() == "Content-Length: 56") BeginInvoke(new DelegateListBox1(IzmeniElementListBox1), substrings[0]); //добавляем в listbox данные в отдельном потоке
 
                    if (upDate.ToString() != "Content-Length: 56") BeginInvoke(new DelegateListBox3(IzmeniElementListBox3), substrings[0], substrings[1]); //добавляем в listbox данные в отдельном потоке
 
                }
 
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка: " + ex.Message);
            }
               
 
             if (bw2.CancellationPending) //проверка остановки действий
                {
                    e.Cancel = true;
                    return;
                }
                e.Result = 123;
                
            }
нужно чтобы таких потоков было 5 допустим, видел примеры и пробовал их, но эти 5ть потоком выполняют запрос одних и тех же данных из listbox где находится информация. Я так понял нужно как то изменить цикл тут:
C#
1
2
3
4
for (int i = 0; i < listBox2.Items.Count; i++) //запускаем цикл для авторизации каждой пары титул:код
                {
****
}
а именно думаю сделать чтобы разный поток брал определенное кол-во информации для чека. Допустим 1 поток берез из listBox2.Items первые 1000 строк, второй поток начиная с 1000 до 2000 и т.д. не представляю даже как это сделать( или может быть как то по другому можно. Подскажите пожалуйста, очень нужно и важно.

Добавлено через 13 часов 31 минуту
Все еще нуждаюсь в помощи...)

Добавлено через 21 час 26 минут
неужели никто не может помочь с данным вопросом?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2017, 09:16
Ответы с готовыми решениями:

Запустить несколько методов в backgroundworker
Запустить несколько методов через backgroundworker, как это сделать? поднял!

Как использовать несколько backgroundWorker-ов?
ранее использовал один backgroundWorker и проблем не возникало. Настало время написать большой проект и столкнулся с таким моментом, что...

Backgroundworker запускает Messagebox несколько раз
public Form1() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false; } ...

23
Эксперт .NET
 Аватар для Rius
13379 / 7833 / 1696
Регистрация: 25.05.2015
Сообщений: 23,834
Записей в блоге: 14
25.04.2017, 18:30
Студворк — интернет-сервис помощи студентам
Статические поля создаются в статическом конструкторе однократно. Вы их можете пересоздать потом, конечно. Но от того, что значение переменной ThreadCount изменилось, размерность ранее созданного массива само собой не изменится, нужен код.
0
0 / 0 / 0
Регистрация: 19.07.2013
Сообщений: 126
25.04.2017, 18:43  [ТС]
Правильно ли будет вот такое решение:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        static int ThreadCount;
 
        static BackgroundWorker[] bw2 = new BackgroundWorker[ThreadCount];
 
........
 
 
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
 
   ThreadCount = Convert.ToInt32(comboBox1.SelectedItem.ToString());
   Array.Resize(ref bw2, ThreadCount);
 
}
т.е. когда выбираю кол-во потоков в combobox, тут же просто задаю размер массива)?
0
Эксперт .NET
 Аватар для Rius
13379 / 7833 / 1696
Регистрация: 25.05.2015
Сообщений: 23,834
Записей в блоге: 14
25.04.2017, 18:45
Лучший ответ Сообщение было отмечено LifeMen как решение

Решение

Нет. В 12 строке создать массив. А в 3 - ничего не делать.

А лучше почитайте про Task и PLINQ...
1
0 / 0 / 0
Регистрация: 19.07.2013
Сообщений: 126
25.04.2017, 18:47  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Нет. В 12 строке создать массив. А в 3 - ничего не делать.
А лучше почитайте про Task и PLINQ...
Ок, спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2017, 18:47

BackgroundWorker. Многопоточность. Как запустить несколько форм?
Имеется - главная форма - &quot;Main.cs&quot;. - форма с &quot;progressBar&quot; - &quot;progressBar.cs&quot; Сценарий: Пользователь. Форма -...

Чтение файлов в несколько потоков
Как написать программу, которая построчно читает все текстовые файлы, находящиеся в папке с исполняемым файлом но для чтения файлов...

WebClient и скачивание в несколько потоков
Подскажите, пожалуйста, как реализовать следующее. Есть несколько прогресс баров (pb1, pb2, pb3), есть список ссылок, которые необходимо...

Один метод и несколько потоков
как работает один метод с несколькими потоками? будет ли это каждый раз запускаться один и тот же метод или каждый раз новый (как новый...

Запуск функции в потоке, создающей еще несколько потоков
Друзья подскажите, пожалуйста, выход из возникшей проблемки! Суть в следующем: есть проект Windows Forms, фреймворк 4. Раньше в главном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru