VB.net Einfaches Multithreading
Habe ich eine Private Sub Füllen(), die im Versuch zu nennen, von button1 in form von
Dim t1 As System.Threading.Thread = New System.Threading.Thread(AddressOf Me.Fill)
t1.Start()
Jedoch wenn ich das Programm starte, passiert nichts. Ich klicken Sie auf die Taste mehrere Male, und die Funktion nicht ausgeführt wird. Was gibt? Die Fill-Funktion ist im Grunde eine Ausgabe Bündel von html aus dem IE in ein Textfeld, läuft regex und Ausgabe der Ergebnisse in eine listbox.
Kann mir jemand helfen damit es funktioniert? Ich würde mich über Hilfe freuen.
EDIT: Unten ist die Fill-Funktion, die ich versuche zu arbeiten. Die Funktion selbst funktioniert, wenn ich versuche es ohne multithreading. Aber nicht mit ihm...
Private Sub Fill()
Try
For Each links In ListBox2.Items
Dim blah As Boolean = False
Do While blah = False
Application.DoEvents()
If WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then
blah = True
WebBrowser1.Navigate(links)
Application.DoEvents()
Me.Refresh()
'OUTPUT THE REGEX IN RTB
Try
RichTextBox1.Text = WebBrowser1.Document.Body.OuterHtml
RichTextBox1.Update()
Application.DoEvents()
Me.Refresh()
'INTRODUCE REGEX
If CheckBox1.Checked = True Then
Dim R As New Regex("</H3><.*gt;")
For Each M As Match In R.Matches(RichTextBox1.Text)
Dim email As String = M.Value.Substring(9).Split("&;").GetValue(0).ToString
ListBox1.Items.Add(email)
Next
End If
Catch ex As Exception
Label1.Text = "Error recieved. Program will not stop"
Me.Refresh()
End Try
Application.DoEvents()
Me.Refresh()
End If
Loop
Next
Catch ex As Exception
End Try
End Sub
- sind Sie sich bewusst von den GUI-thread/worker-thread marshalling erforderlich?
- Hier ist ein kleines tutorial auf multi-threading in VB.Net: chrishaas.wordpress.com/2009/06/25/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie werden Probleme haben, weil Sie nicht auf dem UI-thread, wenn Sie versuchen zu schreiben, um das Textfeld in der Fill () - Methode – dies führt zu einer Ausnahme. Um das problem zu lösen müssen Sie die Schalter an den UI-thread mit BeginInvoke und eine Stellvertretung, wie im Beispiel unten:
Starten Sie, indem Sie einen Haltepunkt in der Methode Fill. Ich Wette, es beginnt gerade fein.
Stellen Sie sicher, dass Ihre Schaltflächen-handler hat noch
Handles Button1.Click
auf das Ende. Manchmal sind die Leute Ausschneiden und einfügen die Schaltfläche, um irgendwo sonst auf Ihre form, und dies bewirkt, dass der IDE auf UNO-Draht und lassen Sie den handler "verwaist".