Многопоточные веб-запросы?

Я программирую инструмент, который будет проходить через множество веб-сайтов и посмотреть, содержат ли они текст в текстовом поле. Теперь я не хочу добавлять многопоточность, поэтому это происходит намного быстрее, наиболее предпочтительно я динамически добавляю потоки. Это мой код сейчас, но он не работает, потому что он говорит о индексе диапазона. И я сомневаюсь, что это работает.

Dim clsThreads As New Generic.List(Of System.Threading.Thread)
Dim numberOfthreads As Integer = 1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 For Each strLine1 As String In TextBox1.Text.Split({vbCr, vbLf}, StringSplitOptions.******************)
 For Each strLine2 As String In TextBox2.Text.Split({vbCr, vbLf}, StringSplitOptions.******************)
 clsThreads(numberOfthreads) = New Thread(Sub() Me.request(strLine1, strLine2))
 clsThreads(numberOfthreads).Name = "Thread: " + numberOfthreads.ToString
 clsThreads(numberOfthreads).IsBackground = True
 clsThreads(numberOfthreads).Start()

 numberOfthreads = numberOfthreads + 1
 If (numberOfthreads.Equals(20)) Then
 numberOfthreads = 0
 End If

 Next
 Next
End Sub

Итак, как я могу реализовать многопоточность по-разному?

Это мой запрос:

Public Sub request(ByVal username, ByVal mail)
 Dim req As WebRequest = WebRequest.Create("http://localhost/" + username)
 req.Method = "GET"
 Dim res As WebResponse = req.GetResponse()
 Dim dataStream As Stream = res.GetResponseStream()
 Dim reader As New StreamReader(dataStream)
 Dim responseFromServer As String = reader.*********()
 If responseFromServer.Contains(mail) Then
 TextBox3.Text = TextBox3.Text + vbNewLine + username
 End If
End Sub

Конечный класс

1 ответ

Что-то вроде этого?

Option Strict On
Option Explicit On
Option Infer Off
Public Class Form1
 Dim ActiveThreads As New List(Of System.Threading.Thread)
 Delegate Sub delRemoveThread(thread As Threading.Thread)
 Sub removeThread(thread As Threading.Thread)
 If Me.InvokeRequired Then
 Me.Invoke(New delRemoveThread(AddressOf removeThread), thread)
 Else
 ActiveThreads.Remove(thread)
 End If
 End Sub
 Private Sub Button1_Click3(sender As Object, e As EventArgs) Handles Button1.Click
 For i As Integer = 1 To 20
 Dim th As New Threading.Thread(New Threading.ParameterizedThreadStart(Sub()
 request("username", "mail")
 removeThread(Threading.Thread.CurrentThread)
 End Sub))
 th.Start()
 Next
 End Sub
 Public Sub request(ByVal username As String, ByVal mail As String)
 Dim req As Net.WebRequest = Net.WebRequest.Create("http://localhost/" + username)
 req.Method = "GET"
 Dim res As Net.WebResponse = req.GetResponse()
 Dim dataStream As IO.Stream = res.GetResponseStream()
 Dim reader As New IO.StreamReader(dataStream)
 Dim responseFromServer As String = reader.*********()
 If responseFromServer.Contains(mail) Then
 TextBox3.Text = TextBox3.Text + vbNewLine + username
 End If
 End Sub
End Class

licensed under cc by-sa 3.0 with attribution.