Запустить поток с несколькими параметрами на VB.net

Запустить поток с  несколькими параметрами на VB.net

Данная задача встала передо мной, когда я писал многопоточный парсер для более быстрого получения информации. Сама суть решения данной задачи, состоит в том, что нужно описать структуру и передать ее в виде параметра.
Например нам нужно передать потоку такие параметры как: сама страница и 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

На самом деле все просто, создали функцию для работы потока, создали структуру для передачи в поток, и запустили поток с параметром.

Если будут какие-то вопросы, то жду в комментах, также буду рад если кто напишет альтернативный вариант или дополнение к моему.

3 Комментария прокомментировать

VBNET
12 марта 2014 в 21:24

Спасибо автору, добра тебе, умный программист

ответить
escobar
1 февраля 2014 в 21:22

А как передать в поток WinForms элемент управления, чтобы из этого потока впоследствии управлять им? Спс.

admin
24 февраля 2015 в 21:23

Это не потокобезопасно делать, хотя можно, может чуть позже напишу статью. Но не советую так делать. И есть элементы которые позволяют считывать данные, например GridView, можно считывать данные с ячеек, записывать, но нельзя создавать новых строк или новых столбцов

ответить

Добавить комментарий

Текст *

Яндекс.Метрика