Thread et maj de control dans un form

Résolu
jean67190 Messages postés 44 Date d'inscription lundi 25 février 2019 Statut Membre Dernière intervention 3 septembre 2020 - 1 sept. 2020 à 15:57
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 2 mai 2024 - 3 sept. 2020 à 13:33
Bonjour,
J'essaye de faire un thread en vb.net, mais la je bloque. Pourtant j'ai pas mal cherché sur internet.
Je voudrais que ce thread tourne en arrière plan en mettant des labels à jour sur le form. Apparemment impossible.
A aussi, dans un autre, il doit mettre un webbrowser à jour (pas encore testé).

De plus (en enlevant la question des labels pour test) quand je fais une boucle FOR x=0 to y, je n'ai pas la main sur les contrôles du form tant que la boucle n'est pas finie.
Voici mes test :

   ' Déclaration
    Private tTask1 As System.Threading.Thread
    Private mreTask1 As System.Threading.ManualResetEvent
    Private Delegate Sub dTask1()
    Private leStop As Boolean = False
    Private lelien(6) As String

    ' Initialisation
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        mreTask1 = New System.Threading.ManualResetEvent(False)
        lelien(0) = "https://www.francetvinfo.fr/titres.rss"
        lelien(1) = "https://news.google.com/news/rss/headlines/section/topic/WORLD?ned=fr&gl=FR&hl=fr"
        lelien(2) = "https://news.google.com/news/rss/headlines/section/q/lci/lci?ned=fr&hl=fr&gl=FR"

        lelien(3) = "https://forum.pcastuces.com/forum.xml"
        lelien(4) = "https://www.extreme-down.video/rss.xml"
        lelien(5) = "http://www.huffingtonpost.fr/feeds/index.xml"

    End Sub


   ' Premier test thread
    Private Sub Task1()
        Me.BeginInvoke(New dTask1(AddressOf sTask1))
        System.Threading.Thread.Sleep(1500)
        Do While leStop = False
            System.Threading.Thread.Sleep(100)
        Loop 'Until ProgressBar1.Value >= ProgressBar1.Maximum
    End Sub

    'Second test Thread
    Private Sub Task1()
        Do While leStop = False
            Me.BeginInvoke(New dTask1(AddressOf sTask1))
            System.Threading.Thread.Sleep(100)
        Loop 'Until ProgressBar1.Value >= ProgressBar1.Maximum
    End Sub

    'Sous tache Premier test (j'ai fait 2 boucles pour voir)
    Private Sub sTask1()
        Dim element As XmlNodeList
        Dim noeud As XmlNode
        Dim noeudEnf As XmlNode

        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

        Dim XmlDoc As XmlDocument = New XmlDocument()

        For iii As Integer = 0 To 2
            Label3.Text = lelien(iii)
            Label3.Refresh()
            Label4.Text = iii
            Label4.Refresh()
            Console.WriteLine("iii : " & iii & " ==> " & lelien(iii))
            Console.WriteLine("==============================================")
            XmlDoc.Load(lelien(iii))

            element = XmlDoc.DocumentElement.GetElementsByTagName("item")

            For Each noeud In element
                For Each noeudEnf In noeud.ChildNodes
                    If (noeudEnf.LocalName = "title") Then
                        'Console.WriteLine(noeudEnf.InnerText)
                    End If
                Next
            Next
        Next

        For iii As Integer = 3 To 5
            Label3.Text = iii
            Label3.Refresh()
            Label4.Text = lelien(iii)
            Label4.Refresh()
            Console.WriteLine("iii : " & iii & " ==> " & lelien(iii))
            Console.WriteLine("================================================")
            XmlDoc.Load(lelien(iii))

            element = XmlDoc.DocumentElement.GetElementsByTagName("item")

            For Each noeud In element
                For Each noeudEnf In noeud.ChildNodes
                    If (noeudEnf.LocalName = "title") Then
                        'Console.WriteLine(noeudEnf.InnerText)
                    End If
                Next
            Next
        Next

        leStop = True
    End Sub

    'Sous tache Second test
    Private Sub sTask1()
        Dim element As XmlNodeList
        Dim noeud As XmlNode
        Dim noeudEnf As XmlNode

        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

        Dim XmlDoc As XmlDocument = New XmlDocument()

        Parallel.For(0,
             5,
             Sub(iii)
                 Try
                     Label3.Text = lelien(iii)
                     Label3.Refresh()
                     Label4.Text = iii
                     Label4.Refresh()
                 Catch ex As Exception

                 End Try
                 Console.WriteLine("iii : " & iii & " ==> " & lelien(iii))
                 Console.WriteLine("===============================================")
                 XmlDoc.Load(lelien(iii))

                 element = XmlDoc.DocumentElement.GetElementsByTagName("item")
                 For Each noeud In element
                     For Each noeudEnf In noeud.ChildNodes
                         If (noeudEnf.LocalName = "title") Then
                             'Console.WriteLine(noeudEnf.InnerText)
                         End If
                     Next
                 Next

             End Sub)

        leStop = True

    End Sub

    'Bouton appelant
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        leStop = False
        tTask1 = New System.Threading.Thread(AddressOf Task1)
        tTask1.IsBackground = True
        tTask1.Start()
    End Sub


La je ne trouve plus.

22 réponses

jean67190 Messages postés 44 Date d'inscription lundi 25 février 2019 Statut Membre Dernière intervention 3 septembre 2020
3 sept. 2020 à 11:00
Put... J'ai réussis. Je clos.
0
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 2 mai 2024 656
3 sept. 2020 à 13:33
Tant mieux
0
Rejoignez-nous