Grosse application : faire tourner une progressBar

Signaler
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Bonjour,
J'ai un programme, dans ce programme je dois effectuer une operation qui met beaucoup de temp ( minimum 40s ) quand cet operation est lancé le programme se bloque comment faire pour faire tourner une progressBar pour montrer à l'utilisateur que le programme ne plante pas

Merci d'avance de votre  aide

6 réponses

Messages postés
427
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
29 janvier 2008
1
est ce que ton opération tourne dans un Thread différent que celui de l'application (si non tu peux deja commencer par ca pour ne pas bloquer le programme).
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
Salut,

En effet, il faut lancer ton traitement dans un autre Thread (ce que tu ne dois surement pas faire).
Utilise un Thread du pool de Thread de cette facon :

<hr />ThreadPool.QueueUserWorkItem(newWaitCallback(LaMethodeDeTonThread));
<hr />

Ou alors crée un nouveau Thread.

Pour faire avancer la ProgressBar, Il faut utiliser une delegation asynchrone, cf ce tutorial 
Tu te crées une petite méthode qui incremente ta ProgressBar, un délégué qui a la même signature, et tu appeles cette méthode via BeginInvoke, comme indiqué dans le tuto.

Mx
MVP C# 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
Et tant que j'y suis, je ne peux que te conseiller de lire ceci sur le blog de coq

Mx
MVP C# 
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Merci
Pour l'avancement de la progressBar c'est ok
Mais la "grosse operation" s'effectue dans la methode de l'evenement d'un button ma methode s'appelle private

void button1_Click(
object sender,
EventArgs e)

MorpionMx -> je dois mettre ou ton code ?
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
Tu te crées une méthode

public void LaMethodeDeTonThread(object state)
{
   // ...
}

dans laquelle tu mets toute ton operation. (enfin, renomme cette méthode, bien sur)
Dans la méthode de ton evenement click, tu la ligne dans mon post plus haut.

Et si tu veux instancier ton propre thread

Thread t = new Thread(new ThreadStart(LaMethodeDeTonThread));
t.Start();

Et tu supprimes le parametre dans la signature (object state) de LaMethodeDeTonThread

Mx
MVP C# 
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
j'essaie merci je vous tient au courant