Questions sur les threads + Au Secours point d'exclamation

Résolu
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 15 juin 2005 à 16:01
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 15 juin 2005 à 16:24
Bonjour à tous,



En faite ma question serait sur le threads :



J'ai cette fonction ci qui me sert à afficher un listview et une
progressbar, je l'ais fais dans un thread comme ca, ca lui permet de
stopper l'affichage a toute moment.

private void ThreadProcess() {
IAsyncResult res;
for(int i = 0 ; i < 11 ; i++) {
res = progressBar1.BeginInvoke(new InvokeMethod(UpdateProgressBar),new object[] {i});
progressBar1.EndInvoke(res);
Thread.Sleep(1);
}
}

private void UpdateProgressBar(int step) {
this.progressBar1.Value = step;
this.listview.add("jean") ; //<------ c'est pour l'exemple
}

En faite ma question c'est "Thread.Sleep(1);" Plus je met une valeur petite plus mon affichage sera rapide ? Si oui y'a t'il moyen
de mettre moins que 1 milliseconde ? et aussi une fois que mon affichage se termine est ce que une fois que le fonction
threadprocess() est terminé le thread meurt il automatiquement ? ou bien dois je faire :

private void ThreadProcess() {
IAsyncResult res;
for(int i = 0 ; i < 11 ; i++) {
res = progressBar1.BeginInvoke(new InvokeMethod(UpdateProgressBar),new object[] {i});
progressBar1.EndInvoke(res);
Thread.Sleep(1);
}
Thread.Abort() ; // si je fais ca Form1::Close() ne s'executera pas.
Form1::Close() ;
}

Par avance, merci.

4 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
15 juin 2005 à 16:14
Le thread se termine automatiquement oui, et plus la valeur de
Thread.Sleep sera petite, plus le temps sera court, donc ton
raisonnement est le bon.

Par contre, Thread.Sleep() accepte un int ou un TimeSpan.



Pourquoi Utiliser BeginInvoke avec un IAsyncResult ?

Pourquoi ne pas utiliser Invoke tout seul, puisque ta méthode UpdateProgressBar ne renvoie rien ?




Mx
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
15 juin 2005 à 16:23
Met simplement

progressBar1.Invoke(new InvokeMethod(UpdateProgressBar),new object[] {i});


et enleve les lignes

IAsyncResult res;
progressBar1.EndInvoke(res);



Mx
3
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
15 juin 2005 à 16:17
heu je sais pas, c'est quoi le mieux en faite dans le cas que je fais ?
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
15 juin 2005 à 16:24
ok merci bcp pour ton aide
0
Rejoignez-nous