Thread et control [Résolu]

Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Dernière intervention
2 août 2010
- - Dernière réponse : MorpionMx
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
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
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de MorpionMx
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Dernière intervention
2 août 2010
0
Merci
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
Commenter la réponse de cs_RMI
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
0
Merci
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
Commenter la réponse de MorpionMx

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.