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

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

21.04.2017, 09:16. Показов 6821. Ответов 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
13827 / 7899 / 1707
Регистрация: 25.05.2015
Сообщений: 23,975
Записей в блоге: 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
13827 / 7899 / 1707
Регистрация: 25.05.2015
Сообщений: 23,975
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. Сразу отвечу: А в PvP с ним. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru