Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VB.Net] Threads : Mise à jour du label ne s'effectue pas

Désolé si le problème a déjà été évoqué : recherche HS

    5 juin 2011 à 14:16:26

    Ancien problème :

    Salut :)
    Je reviens vers vous, cette fois ci avec un problème concernant le VB.Net.

    En fait, mon programme a deux threads : un gérant l'interface, un autre gérant les différentes fonctions.
    Voici mon code.

    Main.vb

    Imports System.Threading
    
    Public Class Main
    
        Public Sub CHANGE_ETAT_PANEL(ByVal valeurLabel As String, ByVal image As Bitmap)
            Me.LBL_ETAT.Text = valeurLabel
            Me.PICTUREBOX_ETAT.Image = image
        End Sub
    
        Private Sub telechargerTuto()
            Dim classeTelechargement = New Classe_Téléchargement_Tuto
            Dim threadTelechargement = New Thread(AddressOf classeTelechargement.telechargerTuto)
            threadTelechargement.Name = "ThreadTelechargement"
            threadTelechargement.Start() ' Démarrage du thread.
        End Sub
    End Class
    


    Classe_Téléchargement_Tuto.vb

    Public Class Classe_Téléchargement_Tuto
            Public contenuPage
            Public titre
            Public auteur
            Public intro
            Public arbre
            Public tutoriel
            Public dateGeneration
    
        Delegate Sub CHANGE_ETAT_PANEL(ByVal valeurLabel As String, ByVal image As Bitmap)
        Public sendCHANGE_ETAT_PANEL As CHANGE_ETAT_PANEL
    
            Function telechargerTuto()
                getInfos()
                Return True
            End Function
    
            Function getInfos()
            Try
                sendCHANGE_ETAT_PANEL = New CHANGE_ETAT_PANEL(AddressOf Main.CHANGE_ETAT_PANEL)
    
                sendCHANGE_ETAT_PANEL("Récupération des informations du tutoriel...", My.Resources.chargement)
    
                Return True
            Catch
                Return False
            End Try
            End Function
    
    End Class
    


    Voilà, le problème est donc que le label LBL_ETAT ne change pas de valeur... ni l'image qui va avec d'ailleurs ^^

    Bref, je sais que j'ai fait une erreur mais je ne sais pas où; en même temps je n'ai jamais réussi à faire marcher les threads :-° , et c'est pas faute d'avoir cherché, je peux vous le promettre.

    Merci !


    Nouveau ^^
    J'ai fait ça pour ne pas avoir à recréer un nouveau sujet.
    Bon, j'ai un petit peu avancé :)

    Main.vb

    Imports System.Threading
    
    Public Class Main
    
        Public Sub CHANGE_ETAT_PANEL(ByVal valeurLabel As String, ByVal imageType As String)
            MsgBox(valeurLabel + imageType)
            Me.LBL_ETAT.Text = valeurLabel
        End Sub
    
        Private Sub telechargerTuto()
            Dim classeTelechargement = New Classe_Téléchargement_Tuto
            Dim threadTelechargement = New Thread(AddressOf classeTelechargement.telechargerTuto)
            threadTelechargement.Name = "ThreadTelechargement"
            threadTelechargement.Start() ' Démarrage du thread.
        End Sub
    End Class
    


    Classe_Téléchargement_Tuto.vb

    Public Class Classe_Téléchargement_Tuto
            Public contenuPage
            Public titre
            Public auteur
            Public intro
            Public arbre
            Public tutoriel
            Public dateGeneration
    
        Delegate Sub CHANGE_ETAT_PANEL(ByVal valeurLabel As String, ByVal imageType As String)
        Public sendCHANGE_ETAT_PANEL As CHANGE_ETAT_PANEL
    
            Function telechargerTuto()
                getInfos()
                Return True
            End Function
    
            Function getInfos()
            Try
                Dim invoke As CHANGE_ETAT_PANEL = New CHANGE_ETAT_PANEL(AddressOf Main.CHANGE_ETAT_PANEL)
                invoke.Invoke("test", "testAussi")
    
                Return True
            Catch
                Return False
            End Try
            End Function
    
    End Class
    


    Là, on rentre bien dans la fonction CHANGE_ETAT_PANEL puisque la boîte de dialogue avec "test image" s'affiche bien. Les paramètres sont donc bien passés aussi.
    Malheureusement, le Me.LBL_ETAT.Text = valeurLabel ne change pas la valeur du label.
    J'ai donc pensé qu'il y avait un problème de rechargement de la form mais non, puique j'ai une image GIF dans la fenêtre, et son animation s'affiche bien.

    Une idée ?

    Merci :p
    • Partager sur Facebook
    • Partager sur Twitter
    www.marvinroger.fr Person, HTML5/CSS3 Coder, Gulp User, Laravel Addict, Python Lover, Node.js Adorer
      5 juin 2011 à 19:27:00

      Bonjour,

      Pourquoi fais-tu le Invoke sur ton délégué ?
      Et ce que tu veux, c'est changer la propriété Text de ton label, non ?

      Moi, je ferais un truc du genre :
      Public Delegate Sub TexteLBL_ETAT(ByVal texteLBL_ETAT As String)
      
      Public Sub EcrireTexteLBL_ETAT(ByVal texteLBL_ETAT As String)
          If LBL_ETAT.InvokeRequired Then
              Dim texteLBL_ETATDelegate As New TexteLBL_ETAT(AddressOf EcrireTexteLBL_ETAT)
              LBL_ETAT.Invoke(texteLBL_ETATDelegate, New Object() {texteLBL_ETAT})
          Else
              LBL_ETAT.Text = texteLBL_ETAT
          End If
      End Sub
      


      Et aussi, essaie de jeter un coup d'oeil aux Conventions de Nommage en .NET (en anglais) parce que le tutoriel du SdZ n'en respecte presque aucune et c'est vraiment vraiment affreux. Je ne prétends pas toutes les respecter (et encore moins dans le code que je viens d'écrire, j'ai essayé de ne pas trop t'embrouiller), mais au moins les principales...
      • Partager sur Facebook
      • Partager sur Twitter
        5 juin 2011 à 21:21:30

        Merci, j'étudie ça précisément demain ;)
        • Partager sur Facebook
        • Partager sur Twitter
        www.marvinroger.fr Person, HTML5/CSS3 Coder, Gulp User, Laravel Addict, Python Lover, Node.js Adorer

        [VB.Net] Threads : Mise à jour du label ne s'effectue pas

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown