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.
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...
[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.