OVH Cloud OVH Cloud

Remplir un treeview par un thread

2 réponses
Avatar
PierreSlideM
voila mon probleme : je voudrais remplir un treeview par une fonction
appellée das un nouveau thread. le probleme c'est que ça bloque lors de
l'ajout du premier node et que le treeview n'est jamair rempli. J'ai essayé
avec BeginInvoque et c'est pareil.
Pourtant,la meme fonction se passe bien si je veux remplir une listbox.
C'est quoi l'astuce ?

2 réponses

Avatar
Mathieu Francesch
Bonsoir Pierre,

Je vous ai fait un petit exemple de code qui j'espère répondra à vos
questions.

######################################################
Public Class Form1

Delegate Sub SetTreeViewCallback()
Private t1 As Thread = Nothing

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
t1 = New Thread(New ThreadStart(AddressOf AppelRemplissageTreeview))
t1.Start()
End Sub

Sub AppelRemplissageTreeview()
RemplissageTreeview()
End Sub

Sub RemplissageTreeview()
If TreeView1.InvokeRequired Then
Dim MyTree As New SetTreeViewCallback(AddressOf
RemplissageTreeview)
Invoke(MyTree)
Else
TreeView1.BeginUpdate()
TreeView1.Nodes.Add("Papa")
TreeView1.Nodes(0).Nodes.Add("Enfant 1")
TreeView1.Nodes(0).Nodes.Add("Enfant 2")
TreeView1.Nodes(0).Nodes(1).Nodes.Add("Petit Enfant 1")
TreeView1.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("Arrière petit
enfant 1")
TreeView1.EndUpdate()
End If
End Sub


End Class
################################################

Pour plus d'informations sur les appels de Thread au travers les différents
contrôles de Windows Form, je vous invite à vous documenter à l'addresse
suivante :

http://msdn2.microsoft.com/en-us/library/ms171728.aspx

J'espère que cela vous sera utile,


--
Cordialement,

Mathieu Francesch



"PierreSlideM" a écrit :

voila mon probleme : je voudrais remplir un treeview par une fonction
appellée das un nouveau thread. le probleme c'est que ça bloque lors de
l'ajout du premier node et que le treeview n'est jamair rempli. J'ai essayé
avec BeginInvoque et c'est pareil.
Pourtant,la meme fonction se passe bien si je veux remplir une listbox.
C'est quoi l'astuce ?


Avatar
Mathieu Francesch
Re bonsoir,

J'ai simplifier un peu le code pour qu'il soit plus facile à lire :

########################################################
Public Class Form1

Delegate Sub SetTreeViewCallback()
Private t1 As Thread = Nothing

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
t1 = New Thread(New ThreadStart(AddressOf RemplissageTreeview))
t1.Start()
End Sub

Sub RemplissageTreeview()
If TreeView1.InvokeRequired Then
Dim MyTree As New SetTreeViewCallback(AddressOf
RemplissageTreeview)
Invoke(MyTree)
Else
TreeView1.BeginUpdate()
TreeView1.Nodes.Add("Papa")
TreeView1.Nodes(0).Nodes.Add("Enfant 1")
TreeView1.Nodes(0).Nodes.Add("Enfant 2")
TreeView1.Nodes(0).Nodes(1).Nodes.Add("Petit Enfant 1")
TreeView1.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("Arrière petit
enfant 1")
TreeView1.EndUpdate()
End If
End Sub

End Class

#####################################################

La clef de voûte : InvokeRequired

Bonne fin de soirée,

--
Cordialement,

Mathieu Francesch



"PierreSlideM" a écrit :

voila mon probleme : je voudrais remplir un treeview par une fonction
appellée das un nouveau thread. le probleme c'est que ça bloque lors de
l'ajout du premier node et que le treeview n'est jamair rempli. J'ai essayé
avec BeginInvoque et c'est pareil.
Pourtant,la meme fonction se passe bien si je veux remplir une listbox.
C'est quoi l'astuce ?