Backgroundworker et Progressbar [Résolu]

Signaler
Messages postés
71
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
7 décembre 2007
-
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
-
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.
A voir également:

6 réponses

Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
7
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.
Messages postés
71
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
7 décembre 2007

Merci.
Messages postés
4
Date d'inscription
jeudi 28 avril 2005
Statut
Membre
Dernière intervention
28 mai 2008

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
Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
7
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...
// ...
}
Messages postés
22
Date d'inscription
lundi 3 janvier 2011
Statut
Membre
Dernière intervention
5 août 2011

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
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
44
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é. -