
Данная задача встала передо мной, когда я писал многопоточный парсер для более быстрого получения информации. Сама суть решения данной задачи, состоит в том, что нужно описать структуру и передать ее в виде параметра.
Например нам нужно передать потоку такие параметры как: сама страница и UserAgent.
Сначала описываем стуктуру:
Structure RequestParam
Public Link As String
Public UserAgent As String
Sub New(ByVal Link As String, ByVal UserAgent As String)
Me.Link = Link
Me.UserAgent = UserAgent
End Sub
End Structure
Теперь саму процедуру, которая и будет являться потоком и в нее мы будет передавать параметры, точнее 1 параметр, который мы создали.
Sub WebZapros(ByVal obj As Object)
If (obj.GetType().Name <> GetType(RequestParam).Name) Then Return
Dim rp As RequestParam = CType(obj, RequestParam)
Dim myHttpRequest As HttpWebRequest = (HttpWebRequest.Create(rp.URL))'rp.url - наш первый параметр
myHttpRequest.CachePolicy = New Cache.HttpRequestCachePolicy(Cache.HttpRequestCacheLevel.NoCacheNoStore)
myHttpRequest.UserAgent = rp.UserAgent' - наш второй параметр
myHttpRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
myHttpRequest.Headers.Add("Accept-Language", "ru")
Dim myHttpResponse As HttpWebResponse = myHttpRequest.GetResponse()
Dim sCookies As String = ""
myHttpRequest.AllowAutoRedirect = False
If Not String.IsNullOrEmpty(myHttpResponse.Headers("Set-Cookie")) Then
sCookies = myHttpResponse.Headers("Set-Cookie")
End If
Dim txt1 As String
Dim myStream1 As New StreamReader(myHttpResponse.GetResponseStream, Encoding.GetEncoding(65001))'65001 это кодировка utf-8, если надо win то ставим 1251
txt1 = myStream1.ReadToEnd
End Sub
А теперь пример как запустить потоки
Private Sub btnZapusk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnZapusk.Click
Dim ThreadRequest As New System.Threading.Thread(AddressOf Request)
Dim rp As RequestParam = New RequestParam("http://site.ru", "Mozilla/5.0 (Windows; U; Windows NT 4.1; ru; rv:1.0.1.32")
ThreadRequest.Start(rp)
End Sub
На самом деле все просто, создали функцию для работы потока, создали структуру для передачи в поток, и запустили поток с параметром.
Если будут какие-то вопросы, то жду в комментах, также буду рад если кто напишет альтернативный вариант или дополнение к моему.