Dans mon appli, j'ai un composant TreeView que je cherche à mettre à jour dans plusieurs cas, qui apparaissent dans divers classes.
De plus j'utilise du multithreading
Pour les mises à jour de base, je peux passer en variables de méthodes ce compostant. Mais avec les Threads, je ne trouve pas de solution ...
Voila mon code qui sera plus simple à comprendre
frm_Appli.vb
Initialisation d'un composant TreeView
|
modules_FonctionsSpools
Public Sub refreshListSpool(ByVal ListeFamille As TreeView) Dim familleSpool As SpoolFamily Dim repIn As String
ListeFamille.Nodes.Clear()
For Each familleSpool In listFamilleSpool Try 'oNode.ImageIndex = 0 'oNode.SelectedImageIndex = 0 oNode.Text = familleSpool.getNom
... 'Eludation qui code pas interessant pour vous
ListeFamille.Nodes.Add(oNode) ListeFamille.ExpandAll() 'Exit Sub Catch ex As Exception MsgBox(ex.ToString) 'End End Try Next End Sub
|
classe_ThreadPrincipal
Public Sub run(ByRef ListeFamille As TreeView) Dim famille As SpoolFamily For Each famille In listFamilleSpool If ((famille.getEtat = True) And (famille.getBusy = "Libre")) Then If (proutproutprout(famille.getLastPrint, Now, NbMnIntervalle)) Then famille.setBusy("Imprime")
Dim impression As New Impression(famille, famille.getImprimanteC) refreshListSpool(ListeFamille) impression.setTreeView(ListeFamille) Dim lancement As New Threading.ThreadStart(AddressOf impression.lanceImpressions) Dim lanceThread As New Threading.Thread(lancement) lanceThread.Start()
End If End If Next End Sub
|
classe_Impression
Private famille As SpoolFamily Private imprimante As imprimante Private log As String Private listeFicPrint As ListView
Private ListeFamille As TreeView
Sub New(ByVal famille As SpoolFamily, ByVal imprimante As imprimante) 'Initialisation des composants du traitements MyClass.famille = famille MyClass.imprimante = imprimante MyClass.log = "" MyClass.listeFicPrint = New ListView End Sub
Public Sub setTreeView(ByRef ListeFamille2 As TreeView) MyClass.ListeFamille = ListeFamille2 End Sub
Public Sub lanceImpressions() famille.setBusy("Imprime")
Dim repIn As String = MyClass.famille.getRepIn
'...
System.Threading.Thread.Sleep(5000) MsgBox(System.Threading.Thread.GetDomainID.ToString) famille.setBusy("Libre") refreshListSpool(MyClass.ListeFamille) End Sub
|
En résumé je cherche à appeler la méthode refreshListeFamille au début de ThreadPrincipal.run et à la fin de chaque thread fils (fin de classe_Impression.lanceImpressions.
Mais c'est ici que mon programme part en erreur, et je ne comprend pas pourquoi
*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*°*
Et croyez moi bientot, les flics auront du boulot, il n'y aura plus que la folie, la joie et l'Anarchie

http://www.salestymbanques.net