Invoke ou pas ?

Résolu
crougni77 Messages postés 28 Date d'inscription dimanche 24 août 2003 Statut Membre Dernière intervention 28 septembre 2009 - 20 juil. 2005 à 02:00
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 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

3 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
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..

http://www.csharp.fr/tutorial.aspx?ID=174
3
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 7
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



Sylvain...
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
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.
3
Rejoignez-nous