Moomoon07
Messages postés223Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention 5 mai 2014
-
8 sept. 2006 à 14:07
Moomoon07
Messages postés223Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention 5 mai 2014
-
13 sept. 2006 à 00:52
Salut !
Voici un petit code qui parcours un dossier de MP3 (sous dossiers compris) et qui crée un fichier txt qui liste le nom complet du titre, son répertoire, genre et album (tags).
Selon la taille du dossier, ça devient assez long.
J'ai un problême : le form fige, les labels ne se mettent pas à jour et la barre de chargement ne marche plus lorsque lorsque l'on perd le focus du form et qu'on le reprend.
J'ai lu et + ou - compris le tuto sur threads/synchrone/asynchrone.
Mais est ce que si je modifie mon code de manière à excecuter quelque chose en asynchrone, cela va régler mon problême ? Et dans ce cas, que dois excecuter en asynchrone ? ou peut être des threads ?
(Pour ceux que ça interesserait et qui voudrais la suite du code (getRepertoire, getGenre et getAlbum)... dites le ...)
this.EndInvoke(iasync3);
}
}
}
}
<hr />
que tu appeles ainsi :
<hr />Thread thread =
new
Thread(
new
ParameterizedThreadStart(LaunchProcess));
thread.Start(TonChemin
);
<hr />
Ensuite, a toi d'optimiser ton code, gerer les exceptions, etc.
Je t'ai juste donné de quoi comprendre comment on utilise Threads + delegués synchrones / asynchrones.
J'ai enlevé le code qui définit le minimum et le step de ta barre, il faut que tu le mettes dans le code ou tu initialises tes controles plutot.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 8 sept. 2006 à 14:44
Salut,
Appelle toute ta méthode dans un Thread différent, et change toutes les instuctions qui modifient les propriétés de tes controles (ProgressBar, Labels), afin d'eviter le CrossThreading, avec la meme procédure que celle qu'on t'a donné dans un précédent topic
Mx
MVP C#
Vous n’avez pas trouvé la réponse que vous recherchez ?
Moomoon07
Messages postés223Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention 5 mai 2014 8 sept. 2006 à 16:38
Ok merci beaucoup.
Finalement je suis arrivé a enlever mes erreurs et a le faire marcher tout seul, mais j'ai fait beaucoup de bidouillage (c'est pas beau à voir). Tu ne l'a cependant pas fait pour rien parce qu'au moins ca me permet d'apprendre un peu.
Merci les admin CS sources, vous êtes des dieux ! (sans faire de lèche ...)
cs_Nurgle
Messages postés1642Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention28 avril 20113 8 sept. 2006 à 21:48
Salut,
Un peu en retard tout de même, je précise qu'il y dans le framework .NET2 un joli petit composant pour l'Asynchrone nommé BackgroundWorker qui englobe tout ça et qui évite d'avoir à manipuler à la main les threads, invoke, IAsyncResult, etc...
(très très pratique )
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201360 9 sept. 2006 à 18:06
Le backgroundWorker ne fait pas tout, il a ces limites...
Je ne sais pas pourquoi, mais j'utilise rarement cet object, je suis toujours avec les Threads moi ;-)
cs_Nurgle
Messages postés1642Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention28 avril 20113 9 sept. 2006 à 18:18
Bof, il a ses limites en effet
Mais tant qu'on ne fait pas de choses trop compliquées, il est utile.
Je dirais que tant qu'on ne manipule qu'un seul autre Thread, le BackgroundWorker suffit largement, d'autant qu'il supporte l'annulation et qu'il peut facilement rapporter sa progression.
Enfin bon, c'est un controle pour les flemmards quoi (comme moi) ;-)
(voir des IAsyncResult et des Invoke de partout me donne des boutons...)
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 9 sept. 2006 à 19:12
C'est vrai que IAsyncResult, BeginInvoke, etc, ca semble etre des termes barbares Et ca semble repoussant
Mais bon, une fois qu'on a pris l'habitude de s'en servir, ca pose plus de soucis