Backgroundworker et Progressbar [Résolu]

Messages postés
71
Date d'inscription
jeudi 9 décembre 2004
Dernière intervention
7 décembre 2007
- - Dernière réponse : krimog
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
- 25 juil. 2011 à 10:57
Salut,

Dans mon application, j'utilise un backgroundworker pour faire une requête SQL et la création d'un fichier. Lors de l'avancement, je fais des écritures dans un textbox.
Mais, je veux utiliser aussi un progressbar qui évolue avec les traitements et donc normalement d'après ce que je pense je dois entrer dans une boucle while qui teste si le backgroundworker effectue encore son travail ou non. Est-ce qu'il existe un truc isAlive pour backgroundworker  comme pour les threads ?

Merci.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Dernière intervention
18 octobre 2008
3
Merci
Salut,

Pas besoin de faire une boucle. Le backgroundworker possède un événement ProgressChanged.
Lors de ton traitement (donc dans l'événement DoWork du backgroundworker), tu faire appelles à la méthode ReportProgress (du backgroundworker). Ca déclenchera l'événement ProgressChanged et là, tu pourras mettre à jour ta barre de progression.

Pour savoir quand ton traitement est terminé, il te faut capturer l'événement RunWorkerCompleted.

Cordialement.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cs_niky
Messages postés
71
Date d'inscription
jeudi 9 décembre 2004
Dernière intervention
7 décembre 2007
0
Merci
Merci.
Commenter la réponse de ahikaz
Messages postés
4
Date d'inscription
jeudi 28 avril 2005
Dernière intervention
28 mai 2008
0
Merci
Bonjour,


je débute en c#. J'effectue un traitement assez long, de ce fait, j'utilise un Backgroundworker pour pouvoir cliquer sur le bouton annuler pendant l'operation. J'ai vu que l'on pouvait passer un parametre a la methode DoWork mais moi je voudrais en passer 4, comment faire ?

Merci d'avance

Caro
Commenter la réponse de rocaro
Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Dernière intervention
18 octobre 2008
0
Merci
Bonjour,

Le paramètre que l'on peut passer est de type object. Par conséquent, il peut s'agir de n'importe quoi (object étant à la racine de tous les objets) : int, double, List, Array, etc.

Typiquement, pour passer 4 paramètres (par exemple 1 entier et 3 chaînes de caractères) :
object[] parameters = new object[] { 15, "Hello", "World", "GoodBye");
// Démarrage du backgroundworker
bg.RunWorkerAsync(parameters);

// Récupération de l'argument dans la méthode DoWork :
private void bg_DoWork(object sender, DoWorkEventArgs e)
{
object[] parameters = e.Argument as object[];

int quinze = parameters[0] as int;
string hello = parameters[1] as string;
string world = parameters[2] as string;
string goodbye = parameters[3] as string;

// Le long traitement...
// ...
}
Commenter la réponse de cs_niky
Messages postés
22
Date d'inscription
lundi 3 janvier 2011
Dernière intervention
5 août 2011
0
Merci
VP je charge des données lus d'une base de données dans ma datagridview en utilisant un simple MyDataGrid.DataSource = MaDataSet.Tables["MaTable"]; mais puis que le chargement des données et lent je veux mettre un progressBar pour indiquer à l'utilisateur que le traitement et en cours ! Pourtant je n'ai aucune idée de comment manipuler une progressBar ...
j'ai Besoin du code SVP
Merci
Commenter la réponse de YuneSh
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
0
Merci
Bonjour

Le problème est que ta méthode ne permet pas de savoir où en est le chargement. Donc ta ProgressBar doit être en mode "Marquee"

Tu dois donc insérer ce code avant le chargement.
maProgressBar.Style = ProgressBarStyle.Marquee;

Et insérer celui-ci après.
maProgressBar.Style = ProgressBarStyle.Continuous;
// Tu peux également remplir la progressBar ainsi
maProgressBar.Value = 100;


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Commenter la réponse de krimog

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.