Invoke ou pas ? [Résolu]

Signaler
Messages postés
28
Date d'inscription
dimanche 24 août 2003
Statut
Membre
Dernière intervention
28 septembre 2009
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Salut tout le monde, mon first post, pour une petite question...



voila j'ai une classe qui un méthode avec un traitement assez long.
Cette méthode est lancé dans un Thread.La classe possède 4 events , 1
pour le démarrage, 1 autre lorsque Abort le thread , un autre lorsque
le traitement est terminé et le dernier pour gérer un pourcentage
d'exécution.

J'ai aussi une form, avec une progressBar. Je branche tout mes events sur des petite méthode de ma Form.

Pour le démarrage je rend visible ma progressBar, pour l'arret et la
fin je la rend invisible, et pour le pourcentage je bouge sa propriété
Value.

Lorsque je lance pour la première fois le traitement tout est ok, ma
progressBar apparait bien et se cache à la fin. Le pb est lorsque
j'essai de relancer le traitement, ma progressBar n'apparait plus
!!!!.???? alors que mon traitement est correctement lancé...



Bref je comprend rien, je sais qu'il faut utiliser les Invokes, et
lorsque je l'utilise tout fonctionne, mais je voulais juste savoir
pourquoi sa arrive a marcher au moins une fois ???

le pire c'est que lorsque j'utilise un Invoke uniquement pour afficher,
et que pour cacher ma ProgressBar je change juste .Visible, ba tout
marche !

Pourquoi y faut utiliser Invoke lorsque l'on affiche la progressBar et pas forcement lorsque l'on veut la cacher ?



un débutant un peu perdu ...


CrougniMan

3 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut, oui il faut utiliser Invoke ou BeginInvoke si un second thread utilise ton control, sinon en plus de consommer beaucoup de ressources system, le comportement est indéfini, ca peut marcher comme ca peut se bloquer, j'imagine qu'il y'a concurrence des threads, l'un modifie ce que fait l'autre etc.. ou ils se bloquent mutuellement, je ne sais pas trop..

http://www.csharp.fr/tutorial.aspx?ID=174
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
Voilà que l'on parle de chose intéressante ici,

bonjour messieurs,



voilà j'ai posé une question hier qui est tout a fait en rapport avec le sujet actuel, mais je n'ai pas eu de réponse .
Je voulais savoir quelle est la meilleure méthode en matière de
performance pour rafraichir une progressbar qui indique la progression
d'un calcul dans un second thread.



PS : j'ai couru voir les tuto du lien Lutinore, très intéressant, moi
qui commence à m'intéresser aux threads, donc aux invoke et compagnie



Sylvain...
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Ouaip, faut dire merci à Mx pour ce tutorial qui est vraiment bien.. A priori l'utilisation de multithreading est une bonne solution pour les opérations longues mais y'a aussi beaucoup de cas de figure ou l'on peut se contenter d'un DoEvents pour eviter le freeze de la forme.