Thread et control [Résolu]

cs_RMI 305 Messages postés vendredi 18 juillet 2003Date d'inscription 2 août 2010 Dernière intervention - 3 juin 2005 à 09:07 - Dernière réponse : MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention
- 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
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 3 juin 2005 à 10:52
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

Merci MorpionMx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de MorpionMx
cs_RMI 305 Messages postés vendredi 18 juillet 2003Date d'inscription 2 août 2010 Dernière intervention - 3 juin 2005 à 11:15
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
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 3 juin 2005 à 13:50
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.