Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.04.2013
Сообщений: 32

Как задействовать многопоточность для обработки больших запросов в WebBrowser

12.01.2014, 22:33. Показов 1907. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,нужна помощь.
Как создать потоки,многопоточность,в программе присутствует веб браузер,далее цикл на поиск некого значение на сайте в элементе веб браузер,пока не найдется будет повторятся n раз,n задается в нумерик,и thread.sleep (n),задается как бы пауза выполнения цикла,дабы дать программе загрузить полностью содержимое странички,но теперь сталкнулся с проблемой,программа обрабатывает мало страниц веб, и функционал программы низок,тут я узнал что можно создать потоки,пытался но не получилось нужно сделать так что бы программа работала в n потоков,которые опять же указываются в текстбоксе в окне программы перед нажатием старт.
как так сделать я не понимаю..помогите..заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.01.2014, 22:33
Ответы с готовыми решениями:

Как правильно сформировать правило для обработки запросов
Имеется программа, которая описывает две матрицы. % Автор: % Дата: 03.09.2019 % инициализация матрицы а (2*2) matrix(a, 1, 1, 88). ...

Сервер для обработки запросов
Здравствуйте. Я сделал сайт на денвере. То есть есть главный комп, на котором запущен денвер и я могу просматривать в браузере свой сайт....

Взаимодействие форм для обработки запросов к БД
Есть две формы. На Form1 отображается данные в DataGridView. На Form2 у меня размещены компоненты в которые я буду писать критерии отбора и...

8
Форумчанин.NET
 Аватар для AeroWhite
556 / 427 / 64
Регистрация: 12.02.2013
Сообщений: 834
12.01.2014, 22:44
Всё равно 1 браузер - 1 поток.
А по теме: последний пост в FAQ очень хорошо описывает потоки
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
13.01.2014, 01:04
Последний пост, думаю, тут не совсем подойдет... Тут больше подойдет, на мой взгляд, такое понятие как пул потоков. Я читал по данной теме, но тестовых примеров не делал (не было необходимости). Советую обратиться к литературе, которую я уже не раз упоминал, там все это есть.
0
43 / 43 / 6
Регистрация: 01.10.2013
Сообщений: 65
Записей в блоге: 3
13.01.2014, 04:30
Цитата Сообщение от Alex_Rom777 Посмотреть сообщение
и thread.sleep (n),задается как бы пауза выполнения цикла,дабы дать программе загрузить полностью содержимое странички,
Разве у браузера нет состояния? Страница загрузилась, пропарсил ее (Парсинг текста с сайта).

Цитата Сообщение от Alex_Rom777 Посмотреть сообщение
программа обрабатывает мало страниц веб, и функционал программы низок,тут я узнал что можно создать потоки,пытался но не получилось нужно сделать так что бы программа работала в n потоков,которые опять же указываются в текстбоксе в окне программы перед нажатием старт.
Единственное, для чего нужны потоки в данном ТЗ, это открывать несколько РАЗНЫХ страниц и парсить их.
0
33 / 3 / 0
Регистрация: 19.10.2013
Сообщений: 53
13.01.2014, 09:27
Мое мнение, что если нет острой необходимости использовать WebBrowser, то нужно пользоваться Post/Get это намного быстрее, да и с потоками, как мне кажется проще.
0
0 / 0 / 0
Регистрация: 13.04.2013
Сообщений: 32
13.01.2014, 14:46  [ТС]
Цитата Сообщение от po4emy4ka Посмотреть сообщение
Разве у браузера нет состояния? Страница загрузилась, пропарсил ее (Парсинг текста с сайта).


Единственное, для чего нужны потоки в данном ТЗ, это открывать несколько РАЗНЫХ страниц и парсить их.
Вот именно нужно сразу открывать в нескольких потоках,даже достаточно 3 или 4 потока,потому что через 1 веб браузер,долго парсится а если threading убрать вовсе,или поставить на самое маленькое значение то лабелы гуд и бэд будут некорректно работать,а как раз с помощью этих меток я и узнаю.
В данном случае мне и нужна многопоточность.
0
43 / 43 / 6
Регистрация: 01.10.2013
Сообщений: 65
Записей в блоге: 3
14.01.2014, 05:35
Кстати, если отображать не нужно полученные страницы, то я полностью согласен с dimOk7.
Цитата Сообщение от dimOk7 Посмотреть сообщение
Мое мнение, что если нет острой необходимости использовать WebBrowser, то нужно пользоваться Post/Get это намного быстрее, да и с потоками, как мне кажется проще.
Если не хочется париться с пулом потоков, а остановиться на 3/4/5 то можно их объявить сразу и потом просто с ними и работать.
На форме есть ЧекедЛистБокс, за счет которого и выбирается, какие потоки запустить, а какие остановить. За счет массива с состоянием и прочей необходимой информацией один и тот же поток не попытается запуститься или остановиться вторично.
VB.NET
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
    Dim T1 As System.Threading.Thread
    Dim T2 As System.Threading.Thread
    Dim T3 As System.Threading.Thread
    Dim T4 As System.Threading.Thread
    Dim T5 As System.Threading.Thread
 
...
    Private Sub btn_Start_Click(sender As Object, e As EventArgs) Handles btn_Start.Click
        Dim indexChecked As Integer
        Dim itemChecked As Object
 
        If Not IsNumeric(txtb_SleepTime.Text) Then txtb_SleepTime.Text = 6
        Select Case CInt(txtb_SleepTime.Text)
            Case Is < 6, Is > 30
                txtb_SleepTime.Text = 6
        End Select
 
        For Each indexChecked In chlb_ProcList.CheckedIndices
            Select Case indexChecked
                Case 0
                    If Not myProcessInfoArray(0).TR_Running Then
                        T1 = New System.Threading.Thread(AddressOf Th1)
                        T1.Start()
                        lab_TR1.ForeColor = Color.Green
                        myProcessInfoArray(0).TR_Running = True
                    End If
                Case 1
                    If Not myProcessInfoArray(1).TR_Running Then
                        T2 = New System.Threading.Thread(AddressOf Th2)
                        T2.Start()
                        lab_TR2.ForeColor = Color.Green
                        myProcessInfoArray(1).TR_Running = True
                    End If
                Case 2
                    If Not myProcessInfoArray(2).TR_Running Then
                        T3 = New System.Threading.Thread(AddressOf Th3)
                        T3.Start()
                        lab_TR3.ForeColor = Color.Green
                        myProcessInfoArray(2).TR_Running = True
                    End If
                Case 3
                    If Not myProcessInfoArray(3).TR_Running Then
                        T4 = New System.Threading.Thread(AddressOf Th4)
                        T4.Start()
                        lab_TR4.ForeColor = Color.Green
                        myProcessInfoArray(3).TR_Running = True
                    End If
                Case 4
                    If Not myProcessInfoArray(4).TR_Running Then
                        T5 = New System.Threading.Thread(AddressOf Th5)
                        T5.Start()
                        lab_TR5.ForeColor = Color.Green
                        myProcessInfoArray(4).TR_Running = True
                    End If
            End Select
        Next
 
    End Sub
 
    Private Sub btn_Stop_Click(sender As Object, e As EventArgs) Handles btn_Stop.Click
        Dim indexChecked As Integer
        For Each indexChecked In chlb_ProcList.CheckedIndices
            Select Case indexChecked
                Case 0
                    If myProcessInfoArray(0).TR_Running Then
                        T1.Abort()
                        lab_TR1.ForeColor = Color.Gray
                        myProcessInfoArray(0).TR_Running = False
                    End If
                Case 1
                    If myProcessInfoArray(1).TR_Running Then
                        T2.Abort()
                        lab_TR2.ForeColor = Color.Gray
                        myProcessInfoArray(1).TR_Running = False
                    End If
                Case 2
                    If myProcessInfoArray(2).TR_Running Then
                        T3.Abort()
                        lab_TR3.ForeColor = Color.Gray
                        myProcessInfoArray(2).TR_Running = False
                    End If
                Case 3
                    If myProcessInfoArray(3).TR_Running Then
                        T4.Abort()
                        lab_TR4.ForeColor = Color.Gray
                        myProcessInfoArray(3).TR_Running = False
                    End If
                Case 4
                    If myProcessInfoArray(4).TR_Running Then
                        T5.Abort()
                        lab_TR5.ForeColor = Color.Gray
                        myProcessInfoArray(4).TR_Running = False
                    End If
            End Select
        Next
    End Sub
 
    Sub Th1()
        Dim iSleepTime As Integer
        iSleepTime = CInt(txtb_SleepTime.Text)
        Do
            'Bla-Bla-Bla
            System.Threading.Thread.Sleep(iSleepTime * 1000)
        Loop
    End Sub
 
    Sub Th2/3/4/5() - то же, что и Th1
    End Sub
Это как костыль на скорую руку, что бы не париться с пулом потоков.
1
0 / 0 / 0
Регистрация: 13.04.2013
Сообщений: 32
14.01.2014, 08:41  [ТС]
Цитата Сообщение от po4emy4ka Посмотреть сообщение
Кстати, если отображать не нужно полученные страницы, то я полностью согласен с dimOk7.

Если не хочется париться с пулом потоков, а остановиться на 3/4/5 то можно их объявить сразу и потом просто с ними и работать.
На форме есть ЧекедЛистБокс, за счет которого и выбирается, какие потоки запустить, а какие остановить. За счет массива с состоянием и прочей необходимой информацией один и тот же поток не попытается запуститься или остановиться вторично.
VB.NET
1
2
3
4
5
6
7
    Dim T1 As System.Threading.Thread
    Dim T2 As System.Threading.Thread
    Dim T3 As System.Threading.Thread
    Dim T4 As System.Threading.Thread
    Dim T5 As System.Threading.Thread
 
...
Это как костыль на скорую руку, что бы не париться с пулом потоков.
А Правильно ли я сделал ? просто ошибки идут.

VB.NET
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
Imports System
Imports System.IO
Imports System.Text
Imports System.Web
Imports System.Xml
Imports System.Threading
Public Class Form1
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim T1 As System.Threading.Thread
        Dim T2 As System.Threading.Thread
        Dim T3 As System.Threading.Thread
        Dim T4 As System.Threading.Thread
        Dim T5 As System.Threading.Thread
 
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Target As String = "http://exsample.com/ascs.php?code=" & TextBox1.Text
        Dim StrSite As String = WebBrowser1.DocumentText.ToString
        Dim FindText As String = ":"
        For i As Integer = 1 To (NumericUpDown2.Text) Step 1
            Threading.Thread.Sleep(100)
            WebBrowser1.Navigate(Target)
            WebBrowser1.ToString()
            WebBrowser1.Refresh()
            Application.DoEvents()
            If StrSite.IndexOf(FindText) <> -1 Then
                WebBrowser1.Refresh()
                My.Computer.FileSystem.WriteAllText("Good.txt", "http://exsample.com/ascs.php?code=" + TextBox1.Text, True)
                TextBox1.Clear()
                lblGoodCount.Text += 1
                TextBox1.Text = RandomName(8, True)
            Else
                lblBadCount.Text += 1
                TextBox1.Clear()
                TextBox1.Text = RandomName(8, True)
                Target = "http://exsample.com/ascs.php?code=" & TextBox1.Text
                Threading.Thread.Sleep(NumericUpDown1.Text)
                WebBrowser1.Refresh()
            End If
        Next i
        Dim indexChecked As Integer
        Dim itemChecked As Object
 
        If Not IsNumeric(txtb_SleepTime.Text) Then txtb_SleepTime.Text = 6
        Select Case CInt(txtb_SleepTime.Text)
            Case Is < 6, Is > 30
                txtb_SleepTime.Text = 6
        End Select
 
        For Each indexChecked In chlb_ProcList.CheckedIndices
            Select Case indexChecked
                Case 0
                    If Not myProcessInfoArray(0).TR_Running Then
                        T1 = New System.Threading.Thread(AddressOf Th1)
                        T1.Start()
                        lab_TR1.ForeColor = Color.Green
                        myProcessInfoArray(0).TR_Running = True
                    End If
                Case 1
                    If Not myProcessInfoArray(1).TR_Running Then
                        T2 = New System.Threading.Thread(AddressOf Th2)
                        T2.Start()
                        lab_TR2.ForeColor = Color.Green
                        myProcessInfoArray(1).TR_Running = True
                    End If
                Case 2
                    If Not myProcessInfoArray(2).TR_Running Then
                        T3 = New System.Threading.Thread(AddressOf Th3)
                        T3.Start()
                        lab_TR3.ForeColor = Color.Green
                        myProcessInfoArray(2).TR_Running = True
                    End If
                Case 3
                    If Not myProcessInfoArray(3).TR_Running Then
                        T4 = New System.Threading.Thread(AddressOf Th4)
                        T4.Start()
                        lab_TR4.ForeColor = Color.Green
                        myProcessInfoArray(3).TR_Running = True
                    End If
                Case 4
                    If Not myProcessInfoArray(4).TR_Running Then
                        T5 = New System.Threading.Thread(AddressOf Th5)
                        T5.Start()
                        lab_TR5.ForeColor = Color.Green
                        myProcessInfoArray(4).TR_Running = True
                    End If
            End Select
        Next
 
    End Sub
 
    End Sub
    Public Function RandomName(ByVal StringLength As Integer, ByVal AddNumbers As Boolean) As String
        Dim Tmp As Integer
        Dim S As Boolean
        For I As Integer = 1 To StringLength
            Do
                Randomize()
                S = True
                Tmp = Rnd() * 122
                If Tmp < 48 Then S = False
                If AddNumbers = False Then
                    If Tmp > 47 And Tmp < 58 Then S = False
                End If
                If Tmp > 57 And Tmp < 65 Then S = False
                If Tmp > 90 And Tmp < 97 Then S = False
                If S = True Then Exit Do
            Loop
            RandomName &= Chr(Tmp)
        Next
    End Function
    Sub Th1()
        Dim iSleepTime As Integer
        iSleepTime = CInt(txtb_SleepTime.Text)
        Do
            'Bla-Bla-Bla
            System.Threading.Thread.Sleep(iSleepTime * 1000)
        Loop
    End Sub
    Sub Th2()
        Dim iSleepTime As Integer
        iSleepTime = CInt(txtb_SleepTime.Text)
        Do
            'Bla-Bla-Bla
            System.Threading.Thread.Sleep(iSleepTime * 1000)
        Loop
    End Sub
    Sub Th3()
        Dim iSleepTime As Integer
        iSleepTime = CInt(txtb_SleepTime.Text)
        Do
            'Bla-Bla-Bla
            System.Threading.Thread.Sleep(iSleepTime * 1000)
        Loop
    End Sub
    Sub Th4()
        Dim iSleepTime As Integer
        iSleepTime = CInt(txtb_SleepTime.Text)
        Do
            'Bla-Bla-Bla
            System.Threading.Thread.Sleep(iSleepTime * 1000)
        Loop
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim indexChecked As Integer
        For Each indexChecked In chlb_ProcList.CheckedIndices
            Select Case indexChecked
                Case 0
                    If myProcessInfoArray(0).TR_Running Then
                        T1.Abort()
                        lab_TR1.ForeColor = Color.Gray
                        myProcessInfoArray(0).TR_Running = False
                    End If
                Case 1
                    If myProcessInfoArray(1).TR_Running Then
                        T2.Abort()
                        lab_TR2.ForeColor = Color.Gray
                        myProcessInfoArray(1).TR_Running = False
                    End If
                Case 2
                    If myProcessInfoArray(2).TR_Running Then
                        T3.Abort()
                        lab_TR3.ForeColor = Color.Gray
                        myProcessInfoArray(2).TR_Running = False
                    End If
                Case 3
                    If myProcessInfoArray(3).TR_Running Then
                        T4.Abort()
                        lab_TR4.ForeColor = Color.Gray
                        myProcessInfoArray(3).TR_Running = False
                    End If
                Case 4
                    If myProcessInfoArray(4).TR_Running Then
                        T5.Abort()
                        lab_TR5.ForeColor = Color.Gray
                        myProcessInfoArray(4).TR_Running = False
                    End If
            End Select
        Next
    End Sub
End Class
0
43 / 43 / 6
Регистрация: 01.10.2013
Сообщений: 65
Записей в блоге: 3
14.01.2014, 11:54
Dim T1 нужно объявлять после Public Class Form1. А у тебя ошибки потому, что есть такое понятие как зона видимости. Другими словами если ты какую то переменную объявляешь в своей процедуре/функции то она видна только там (если она не статик). А при объявлении на самом верху (после Public Class Form1) они становятся глобальными и видны во всем твоем проекте.
Цитата Сообщение от Alex_Rom777 Посмотреть сообщение
VB.NET
1
2
3
4
5
6
7
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim T1 As System.Threading.Thread
    Dim T2 As System.Threading.Thread
    Dim T3 As System.Threading.Thread
    Dim T4 As System.Threading.Thread
    Dim T5 As System.Threading.Thread
End Sub
Вот кстати как пример от одного из форумчанина http://ds-release.ru/vb-net/peremennye-vb-net/

Весь твой код не смотрел. Но у меня на форме просто есть поле, куда можно указать интервал работы для потока txtb_SleepTime.Text и чекедлистбокс в котором выводится список (максимум там будет 5 строк (итемов) с какими работать ставится галочка.
Миниатюры
Как задействовать многопоточность для обработки больших запросов в WebBrowser  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.01.2014, 11:54
Помогаю со студенческими работами здесь

Скрипт для обработки HTTP GET запросов.
Разыскиваю КОМПАНЬОНА !!! для работы в команде :friends: по созданию и запуску совмесного бизнеса. (страждущих работы по найму -...

Servlet для обработки запросов из нескольких jsp
Здравствуйте! Мне необходимо написать сервлет для обработки запросов из нескольких jsp. Пока написан только сервлет, который обрабатывает...

Простой сервер С++ для обработки HTTP запросов
Здравствуйте, недавно начал изучать с++.Стала задача поставить сервер под linox. Может кто-то скинуть нормальную статью, или пример...

Подойдет ли FX-8. для 8-и поточной обработки больших массивов decimal?
Подойдет ли FX-8... для 8-и поточной обработки больших массивов decimal С#? Вопрос из-за того, что в этих процах только 4-е сопроцессора....

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru