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

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

9 réponses

Répondre au sujet
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 10 juil. 2006 à 15:49
+3
Utile
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#
*/
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_coq
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 10 juil. 2006 à 14:51
0
Utile
Salut,

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

/*
coq
MVP Visual C#
*/
Commenter la réponse de cs_coq
bossun 175 Messages postés lundi 3 mars 2003Date d'inscription 15 décembre 2010 Dernière intervention - 10 juil. 2006 à 15:01
0
Utile
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 794 Messages postés vendredi 24 septembre 2004Date d'inscription 19 août 2008 Dernière intervention - 10 juil. 2006 à 15:07
0
Utile
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 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 10 juil. 2006 à 15:09
0
Utile
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 175 Messages postés lundi 3 mars 2003Date d'inscription 15 décembre 2010 Dernière intervention - 10 juil. 2006 à 15:39
0
Utile
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 175 Messages postés lundi 3 mars 2003Date d'inscription 15 décembre 2010 Dernière intervention - 10 juil. 2006 à 15:44
0
Utile
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 175 Messages postés lundi 3 mars 2003Date d'inscription 15 décembre 2010 Dernière intervention - 10 juil. 2006 à 15:51
0
Utile
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 175 Messages postés lundi 3 mars 2003Date d'inscription 15 décembre 2010 Dernière intervention - 10 juil. 2006 à 16:09
0
Utile
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.