Attendre la fin du travail du backgroundworker [Résolu]

bossun
Messages postés
175
Date d'inscription
lundi 3 mars 2003
Dernière intervention
15 décembre 2010
- 10 juil. 2006 à 14:40 - Dernière réponse : bossun
Messages postés
175
Date d'inscription
lundi 3 mars 2003
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>
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 10 juil. 2006 à 15:49
3
Merci
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#
*/

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_coq
cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 10 juil. 2006 à 14:51
0
Merci
Salut,

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

/*
coq
MVP Visual C#
*/
Commenter la réponse de cs_coq
bossun
Messages postés
175
Date d'inscription
lundi 3 mars 2003
Dernière intervention
15 décembre 2010
- 10 juil. 2006 à 15:01
0
Merci
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>
Commenter la réponse de bossun
Nikoui
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Dernière intervention
19 août 2008
- 10 juil. 2006 à 15:07
0
Merci
Le backgroundworker ne leve pas un évènement en fin de traitement? (auquel tu pourrais t'abonner)
Commenter la réponse de Nikoui
cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 10 juil. 2006 à 15:09
0
Merci
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#
*/
Commenter la réponse de cs_coq
bossun
Messages postés
175
Date d'inscription
lundi 3 mars 2003
Dernière intervention
15 décembre 2010
- 10 juil. 2006 à 15:39
0
Merci
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>
Commenter la réponse de bossun
bossun
Messages postés
175
Date d'inscription
lundi 3 mars 2003
Dernière intervention
15 décembre 2010
- 10 juil. 2006 à 15:44
0
Merci
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>
Commenter la réponse de bossun
bossun
Messages postés
175
Date d'inscription
lundi 3 mars 2003
Dernière intervention
15 décembre 2010
- 10 juil. 2006 à 15:51
0
Merci
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>
Commenter la réponse de bossun
bossun
Messages postés
175
Date d'inscription
lundi 3 mars 2003
Dernière intervention
15 décembre 2010
- 10 juil. 2006 à 16:09
0
Merci
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>
Commenter la réponse de bossun

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.