Problème avec progressbar + begininvoke

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 à 12:21
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 à 14:16
Bonjour à tous,



En faite j'ai un progresseBar qui s'appelle p et la je fais un test car
je voudrais qu'on puisse annuler la boucle en appuyant sur le bouton
annuler. La boucle remplis un listview en faite.



Pendant qu'on remplis le listview on incremente le progressebar, mais
si on appuis sur annuler ca va point marcher. On m'a conseillé
d'utiliser BeginInvoke.



for (int i = 0 ; i<15000 ; i++)

{

p.PerformStep() ;

a = new ListViewItem("jean") ;

a.SubItems.Add("paul") ;

l.tems.Add(a) ;

}





[frlrfsystemwindowsformscontrolclassbegininvoketopic2.htm ]Mais
justement j'ai pas trop bien compris en faite a quoi sert la classe
Delegate, "BeginInvove(Delegate e)" je sais que c'est pour
executer un bout de code dans un thread separé. Mais comment faut
t'il faire ? mettre juste la gestion du bouton annuler dans un
thread separé ?



Par avance, merci

[JScript] [frlrfsystemwindowsformscontrolclassbegininvoketopic2.htm public function
BeginInvoke(Delegate, Object[]) : IAsyncResult;]

3 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 à 12:43
Cela sert a faire un appel asynchrone d'une méthode.

Mais si tu n'attends pas de valeur en retour de ta méthode, utilise plutot Invoke() que BeginInvoke()



Voila comme je ferais :



<hr size="2" width="100%">

public delegate void Increment()



public void IncrementProgressBar()

{

p.PerformStep();

a = new ListViewItem("jean") ;

a.SubItems.Add("paul") ;

l.tems.Add(a) ;

}



//Et dans la méthode de ton Thread :



public void MonThread()

{

for (int i = 0 ; i<15000 ; i++)

{

Invoke(new Increment(IncrementProgressBar), null);

}

}

<hr size="2" width="100%">

Et dont quand tu cliques sur le bouton d'annulation, tu fais tonThread.Abort() et tu catches l'exception ThreadAbortException().

Dans ce catch, tu as juste a supprimer les éléments de ta liste.



Normalement, ca devrait etre bon.

Mx
1
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 à 12:58
ok, merci de ta reponse
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 à 14:16
ben y'a un problème quand je clique sur annuler et que je fais
Thread.Abort ca fait rien et si je fais Thread.Sleep(1000) ca marche.
Je precise que je fais Thread.Abordtet non Thread.Abort() sinon il me
marque appel non conforme a une fonction membre non static.
0
Rejoignez-nous