crougni77
Messages postés28Date d'inscriptiondimanche 24 août 2003StatutMembreDernière intervention28 septembre 2009
-
20 juil. 2005 à 02:00
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 2012
-
20 juil. 2005 à 20:43
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
A voir également:
Cannot invoke equals(int) on the primitive type int
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 20 juil. 2005 à 04:37
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..
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 20 juil. 2005 à 09:50
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
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 20 juil. 2005 à 20:43
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.