Backgroundworker et Progressbar

Résolu
ahikaz Messages postés 71 Date d'inscription jeudi 9 décembre 2004 Statut Membre Dernière intervention 7 décembre 2007 - 8 nov. 2007 à 16:40
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre 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.
A voir également:

6 réponses

cs_niky Messages postés 168 Date d'inscription jeudi 28 juin 2001 Statut Membre Dernière intervention 18 octobre 2008 7
8 nov. 2007 à 17:13
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.
3
ahikaz Messages postés 71 Date d'inscription jeudi 9 décembre 2004 Statut Membre Dernière intervention 7 décembre 2007
12 nov. 2007 à 16:40
Merci.
0
rocaro Messages postés 4 Date d'inscription jeudi 28 avril 2005 Statut Membre Dernière intervention 28 mai 2008
14 mai 2008 à 16:12
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
0
cs_niky Messages postés 168 Date d'inscription jeudi 28 juin 2001 Statut Membre Dernière intervention 18 octobre 2008 7
14 mai 2008 à 19:39
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...
// ...
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
YuneSh Messages postés 22 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 5 août 2011
23 juil. 2011 à 23:07
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
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 51
25 juil. 2011 à 10:57
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é. -
0