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

Signaler
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
-
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
-
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

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
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#
*/
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Salut,

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

/*
coq
MVP Visual C#
*/
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
1
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>
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
Le backgroundworker ne leve pas un évènement en fin de traitement? (auquel tu pourrais t'abonner)
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
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#
*/
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
1
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>
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
1
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>
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
1
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>
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
1
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>