Attendre la fin du travail du backgroundworker

Résolu
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 - 10 juil. 2006 à 14:40
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 - 10 juil. 2006 à 16:09
salut, j'utilise le backgroundworker pour exécuter les taches lourdes sur
des threads différents..

dans une étape je dois attendre que le backgroundworker aie terminé son
travail avant de poursuivre.. est-ce que cela est possible?

suivant les procédures à exécuter, le backgroundworker peut prendre +/- du
temps inconnu à l'avance.

je ne peux pas faire un sleep tu thread principal car je ne sais pas combien
de temps prendra le travail du backgroundworker.

merci bcp

Bossun

P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F< body>

9 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 juil. 2006 à 15:49
Regarde la consommation proc durant ton "attente", tu comprendras que c'est nécessaire ;-)

L'appel de DoEvents permet de demander le traitement des messages reçus, le problème si tu ne met que ça, c'est que le code va s'executer en consommant les ressources CPU disponibles du poste.
Ajoute une pause avec Thread.Sleep. 500ms devrait être une valeur suffisante sans pour autant que le GUI apparaissent comme étant freezé.

/*
coq
MVP Visual C#
*/
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 juil. 2006 à 14:51
Salut,

Tu peux te servir de la propriété IsBusy par exemple.

/*
coq
MVP Visual C#
*/
0
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 1
10 juil. 2006 à 15:01
oui j'ai regardé cette propriété...

en fait je fais une boucle qui s exécute tant que la propriété isbusy est vraie. la boucle ne fait rien.

ça semble marcher.

Bossun

P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F< body>
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
10 juil. 2006 à 15:07
Le backgroundworker ne leve pas un évènement en fin de traitement? (auquel tu pourrais t'abonner)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
10 juil. 2006 à 15:09
Oui mais côté blocage d'execution pur et dur c'est moins pratique.

Par contre quand tu dis que tu ne fais rien dans la boucle, tu met quand même un petit Thread.Sleep j'espère ?

/*
coq
MVP Visual C#
*/
0
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 1
10 juil. 2006 à 15:39
je ne mets pas de thread.sleep mais je fais un application.doevents dans la boucle. j'ai lu ça dans un forum et ça semble fonctionner sans problème.

est-ce bon ça ou je dois mettre un thread.sleep dans tous les cas?

Bossun

P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F< body>
0
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 1
10 juil. 2006 à 15:44
en fait j'ai mis le thread.sleep et enlevé le application.doevents.. ben ça marche pas.. mon application plante.

j'ai rajouté les 2 lignes. (thread.sleep et application.doevents) et ça semble marcher comme il faut.

Bossun

P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F< body>
0
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 1
10 juil. 2006 à 15:51
yes je vais voir ça.. en attendant je vais voir ce que ça donne en utilisant l evenement qui s exécute quand le backgroundworker a fini le traitement. 

Bossun

P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F< body>
0
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 1
10 juil. 2006 à 16:09
ah le thread.sleep semble bien nécessaire. mais que je mettes 500milisecondes ou 50 milisecondes, l appli utilise pareille les ressources de l'UC.. env 50%

c'et vrai que si on met pas le thread.sleep l'UC est utilisé à 100%

merci pour vos conseils

Bossun

P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F< body>
0
Rejoignez-nous