VB.net Simple Multithreading
J'ai une Private Sub Fill(), qui im essayant d'appel de button1, sous la forme de
Dim t1 As System.Threading.Thread = New System.Threading.Thread(AddressOf Me.Fill)
t1.Start()
Cependant, lorsque je lance le programme, rien ne se passe. Je clique sur le bouton de nombreuses fois et la fonction n'est pas exécutée. Ce qui donne? Le Remplissage de la fonction est essentiellement de la sortie d'un tas de html à partir d'IE dans une zone de texte, l'exécution de regex et de la sortie des résultats dans une listbox.
Quelqu'un peut-il m'aider à obtenir ce travail? Je vous remercie de l'aide.
EDIT: ci-Dessous, le Remplir la fonction que je suis en train d'essayer de se mettre au travail. La fonction elle-même fonctionne, quand je l'ai essayer sans le multithreading. Mais pas avec elle...
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
- connaissez-vous le thread GUI/thread de travail de triage exigence?
- Voici un petit tutoriel sur le multi-threading dans VB.Net: chrishaas.wordpress.com/2009/06/25/...
Vous devez vous connecter pour publier un commentaire.
Je pense que vous êtes d'avoir des problèmes parce que vous n'êtes pas sur le thread de l'INTERFACE utilisateur lorsque vous essayez d'écrire sur la zone de texte dans la méthode Fill () – cela provoque une exception. Pour résoudre le problème, vous devez basculer vers le thread d'INTERFACE utilisateur à l'aide de BeginInvoke et un délégué comme dans l'exemple ci-dessous:
Commencez par placer un point d'arrêt à l'intérieur de la méthode de Remplissage. Je parie qu'il démarre très bien.
Assurez-vous que votre gestionnaire de Bouton a encore
Handles Button1.Click
sur la fin. Parfois, les gens couper et coller le Bouton quelque part sur leur forme, ce qui provoque l'IDE de l'onu-fil et de laisser le gestionnaire "orphelins".