Thread et control

Résolu
cs_RMI Messages postés 305 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 août 2010 - 3 juin 2005 à 09:07
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 - 3 juin 2005 à 13:50
Bonjour,



Voila mon problème:

J'ai une form avec un tabcontrol

Les 2 premières tabpages sont rempli dans le load du winform la 3ème contenant un treeview via un thread thArbo

thArbo = new Thread(new ThreadStart(ArboFill));

thArbo.Name="ArboFill";

thArbo.Start();

car la construction de l'arborescence est un peu longue.

Si je vais sur mon 3ème onglet et que le thread est terminé tout est OK pas de plantus.

Si le thread n'est pas terminé alors j'ai le message d'erreur suivant



Une exception non gérée du type 'System.InvalidOperationException' s'est produite dans system.windows.forms.dll



Informations supplémentaires : L'action effectuée sur ce contrôle
est appelée à partir d'un thread incorrect. Vous devez marshaler le
thread correct en utilisant Control.Invoke ou Control.BeginInvoke pour
effectuer cette action.



Le problème, c'est que je ne comprends rien à l'utilisation de la fonction Invoke (malgrés les exemples présents sur le forum).

Est ce qq peu m'aider SVP

Théo

3 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
3 juin 2005 à 10:52
Essaie ainsi, meme si je doute du resultat (il faudra peut-etre adapter)



private delegate void LoadTab();



private void LoadThirdTab()

{

// Ici remplissage de ton treeview

}



//et dans la méthode de ton Thread
BeginInvoke(new LoadTab(LoadThirdTab), null);




Mx
3
cs_RMI Messages postés 305 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 août 2010 2
3 juin 2005 à 11:15
C'est génial ça marche !! MERCI BEAUCOUP!!!

J'ai quand même 2 questions

Que fait en clair le beginInvoke?

et MorpionMx pourquoi Morpion (pb avec petites bêtes?)

Théo
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
3 juin 2005 à 13:50
En fait, normalement tu n'as pas le droit de faire un appel direct des fonctions
appartenant a un thread (ici, ta form) depuis un autre thread (celui
qui rempli)

BeginInvoke te permet de faire un appel asynchrone de ces fontcions.



Et sinon, tu peux virer le morpion, et garder le Mx ;) Codes-sources
n'acceptant pas les pseudo a 2 lettres, j'ai rajouté le morpion...
rapport au jeu, pas a la bebete ;)

Mx
0
Rejoignez-nous