С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 29.05.2014
Сообщений: 175

Как создать многопоточность?

05.01.2015, 23:17. Показов 2220. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно организовать работу нескольких экземпляров webBrowser'a в разных потоках.
Т.е. в webBrowser'е отображается страница, где есть кнопка "Подписаться". Создана программа которая просто автоматически кликает на эту кнопку когда находит её. Но на странице может быть 70-80 кнопок к примеру. И тогда программа начинает сначала подлагивать и в окне программы написано "(Не отвечает)". Но спустя минуту начинается выполнятся дейтсвие. окно программы нельзя двигать в это время или что либо с ним делать. могу скинуть код программы) там всего 70 строк.

вопрос следующий - как создать многопоточность в данной ситуации?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.01.2015, 23:17
Ответы с готовыми решениями:

Как создать многопоточность из одного асинхронного потока?
есть данная процедура: private async void button2_Click(object sender, EventArgs e) { foreach (var item in...

Как организовать многопоточность?
здравствуйте, собственно дело такое - есть сайт, на котором есть раздел в котором 20 страниц, которые в поисковой строке отличаются друг от...

Как реализовать безопасную многопоточность
Есть у меня класс, который содержит поток. Этот класс имеет переменные: состояние и команда. Обе - перечисления. Нужно безопасно...

17
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.01.2015, 23:23
Цитата Сообщение от Inkorpus Посмотреть сообщение
могу скинуть код программы
Давайте посмотрим.
0
1 / 1 / 0
Регистрация: 29.05.2014
Сообщений: 175
05.01.2015, 23:32  [ТС]
insite2012, я вставил код но думаю что Вам намного эффективнее будет, чтоб Вы сами посмотрели что и как происходит
WindowsFormsApplication8.rar
действия происходят на сайте ask.fm. могу дать вам логин и пароль от тестовой страницы(они внутри архива)

описание каждой кнопки:
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.01.2015, 23:49
Inkorpus, немного посмотрел. Это не код, а полная *** В коде Формы 1 есть две кнопки, на форме их нет... Все как-то беспорядочно...
0
1 / 1 / 0
Регистрация: 29.05.2014
Сообщений: 175
05.01.2015, 23:53  [ТС]
insite2012, что значит их нет на форме?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.01.2015, 23:59
Цитата Сообщение от Inkorpus Посмотреть сообщение
что значит их нет на форме?
То и значит. Открыл проект, в коде есть, на форме нет)
0
1 / 1 / 0
Регистрация: 29.05.2014
Сообщений: 175
06.01.2015, 00:04  [ТС]
insite2012, ну и я впервые что-то подобное делаю, поэтому уж не обессудьте)
если можете, то скажите, как можно по другому организовать нажатие на кнопки "Подписаться" и "Отписаться", чтоб при этом форма не зависала.

Добавлено через 3 минуты
insite2012, только что скачал проект, который вам отправил, открыл его и всё есть) если вас не затруднит - добавьте тогда у себя те 2 кнопки на форму..
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.01.2015, 00:11
Inkorpus, вам тут по сути МНОГО поточность ни к чему. Достаточно одного потока, (кроме интерфейса), который будет парсить страницу и кликать на тех кнопках что надо.
Да, надо бы еще предусмотреть перемещение на следующие страницы, и так до конца.
0
1 / 1 / 0
Регистрация: 29.05.2014
Сообщений: 175
06.01.2015, 00:14  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Достаточно одного потока, (кроме интерфейса), который будет парсить страницу и кликать на тех кнопках что надо.
как мне это реализовать?

Цитата Сообщение от insite2012 Посмотреть сообщение
Да, надо бы еще предусмотреть перемещение на следующие страницы, и так до конца.
подписка на людей происходит только на одной странице, я не делаю никаких переходов
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.01.2015, 00:20
Цитата Сообщение от Inkorpus Посмотреть сообщение
подписка на людей происходит только на одной странице, я не делаю никаких переходов
так надо этот момент сразу продумать. Визуализация тут вообще не нужна. Простой WebBrowser, без окна. Запускаешь программу, она сама авторизуется, проходит по всем страницам, находит тех на кого нет подписки и подписывается.
Цитата Сообщение от Inkorpus Посмотреть сообщение
как мне это реализовать?
Я бы сделал через свой отдельный класс, унаследованный от BackgroundWorker, с отдельным WebBrowser внутри.
0
1 / 1 / 0
Регистрация: 29.05.2014
Сообщений: 175
06.01.2015, 00:26  [ТС]
insite2012, вы бы не могли это реализовать?
извините за наглость, если что) я не знаю трудоёмкий ли это процесс или нет,поэтому и задал этот вопрос.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.01.2015, 00:28
Цитата Сообщение от Inkorpus Посмотреть сообщение
вы бы не могли это реализовать?
По крайней мере, могу попробовать))) Как будет результат, покажу что выйдет.
0
1 / 1 / 0
Регистрация: 29.05.2014
Сообщений: 175
06.01.2015, 00:29  [ТС]
insite2012,
Цитата Сообщение от insite2012 Посмотреть сообщение
она сама авторизуется, проходит по всем страницам, находит тех на кого нет подписки и подписывается
боюсь, я где-то не так выразился.
возле каждого ответа есть кол-во лайков. нажимая на них открывается окно с пользователями которые лайкнули, напротив каждого есть кнопка "Подписаться". Есть ответы, где 1000 лайков и вот я на всю 1000 хочу подписаться

открывается такое окно:


моя программа отписывается от людей быстро. от всей 1000 человек может отписаться за минуты 2-3. но подписывается долго и я уже выше описывал что происходит при подписывании)
0
1 / 1 / 0
Регистрация: 29.05.2014
Сообщений: 175
06.01.2015, 00:30  [ТС]
insite2012, буду признателен, если вы это реализуете!!
буду в этому теме ждать ваш ответ)
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.01.2015, 00:50
Цитата Сообщение от Inkorpus Посмотреть сообщение
буду в этому теме ждать ваш ответ)
Решим так. Я вам сделаю обертку над BackgroundWorker-ом, а вы внутри можете реализовать все что необходимо.
0
1 / 1 / 0
Регистрация: 29.05.2014
Сообщений: 175
06.01.2015, 23:50  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
можете реализовать все что необходимо.
всё что мне нужно - чтоб программа подписывалась на людей так же быстро, как и отписывалась.
я не знаю в чём причина того, что сейчас она начинает лагать при подписывании(
больше от программы ничего не требуется) только подписываться и отписываться.(с отписыванием никаких проблем нет)

Добавлено через 22 часа 53 минуты
insite2012, ещё раз здравствуйте. так вы мне всё таки поможете или уже нет? если нет, я не обижусь)
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
07.01.2015, 00:06
Лучший ответ Сообщение было отмечено Inkorpus как решение

Решение

Inkorpus, я могу только набросать каркас, внутри которого вы можете реализовать все что вы хотите. Примерно вот так.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.ComponentModel;
 
namespace ConsoleApplication2 {
    class Program {
        //Пример использования
        static void Main(string[] args) {
            //Создаем объект
            Subscriber subscriber = new Subscriber("aaa", "aaa");
            //Подписываемся на его события
            subscriber.ProgressChanged += new ProgressChangedEventHandler(subscriber_ProgressChanged);
            subscriber.RunWorkerCompleted += new RunWorkerCompletedEventHandler(subscriber_RunWorkerCompleted);
            //И запускаем операцию
            subscriber.RunWorkerAsync();
 
            Console.ReadLine();
        }
        //Обработчик завершения асинхронной операции
        static void subscriber_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
            
        }
        //Обработчик прогресса операции
        static void subscriber_ProgressChanged(object sender, ProgressChangedEventArgs e) {
            
        }
    }
    class Subscriber : BackgroundWorker {
        public Subscriber(string address, string password) {
            //Конфигурируем наш класс
            this.WorkerSupportsCancellation = true;
            this.WorkerReportsProgress = true;
        }
        protected override void OnDoWork(DoWorkEventArgs e) {
            int i=0;
            while (true) {
                //Тут делаем что необходимо
                //можно добавить прогресс операции
                //вызовом метода ReportProgress()
                ReportProgress(++i);
                //Можно отменить операцию
                //установкой e.Cansel в true
                if (this.CancellationPending) {
                    e.Cancel = true;
                }
            }
        }
    }
}
1
1 / 1 / 0
Регистрация: 29.05.2014
Сообщений: 175
11.01.2015, 21:49  [ТС]
insite2012, может вы ещё не забыли меня. если честно, для чего вы создали класс я не понял.
я пытался ещё раз запустить подписку на людей в отдельном потоке, но выдаётся ошибка:


вот то что я делал:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void button2_Click(object sender, EventArgs e)
        {
           
            Task.Factory.StartNew(new Action(kol));
 
        }
        
        void kol()
        {
            //Thread.Sleep(TimeSpan.FromSeconds(5));
 
            
                HtmlElementCollection elmCol;
                elmCol = webBrowser1.Document.GetElementsByTagName("a");
                foreach (HtmlElement elmBtn in elmCol)
                {
 
                    if (elmBtn.GetAttribute("className") == "link-green")
                    {
                        elmBtn.InvokeMember("Click");
                    }
                }
            }
вопрос - как при нажатии кнопки организовать запуск нового потока, который обеспечивает подписку на людей?
заранее спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2015, 21:49
Помогаю со студенческими работами здесь

Как удобней реализовать многопоточность в приложении
Здравствуйте. Стоит такая задача: разработать многооконное приложение. Каждое окно должно работать независимо, то есть, пока в одном...

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

Следы от эллипса на форме при его движении (как здесь поможет многопоточность?)
При движении эллипс оставляет следы на форме. Мне посоветовали использовать два потока. Цитирую слова: "Рисовать в основном...

Как создать многопоточность
В сети гуглил, но так банального ответа для себя не нашёл, как размногопоточить приложение, в delphi делал так function getnumberbux:...

Многопоточность - как создать динамический массив потоков
Привет всем:) Вот решил заняться многопоточность и,как и у всех,возникли проблемы. 1) как создать динамический массив потоков? Unit1 ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru