bgw.DoWork += new DoWorkEventHandler(Wmi_Requests.getProcesses(hostname)); // Ne fonctionne pas
remplace cela par
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
et
1 2 3 4
| void bgw_DoWork(object sender, DoWorkEventArgs e)
{
Wmi_Requests.getProcesses(hostname);
} |
Ensuite, le progress ne marche que si tu dis au bgw que le progress a change...
il faut ecrire quelque part [c]ReportProgress(la valeur de progress)[\c]
Le seul endroit pour le faire, c'est dans la méthode getProcesses.
par exemple:
1 2 3 4 5 6 7 8 9 10 11 12
| var productcollection= searcher.Get();
int i= 0;
foreach (ManagementObject product in productcollection)
{
// Pour cet exemple, sortie vers la console
Object Name = product["Name"].ToString();
Object Version = product["ProcessId"].ToString();
Console.WriteLine(Name + " --- " + Version);
i++;
bgw.ReportProgress(i/productcollection.Count*100);
} |
Tu vas aussi avoir un problème avec les events ajoutes par [c]+= new[\c]. A chaque fois que l'utilisateur va cliquer sur le bouton, tu souscris aux événements une fois de plus. 1 clic=1 souscription a l’événement. 2 clics = 2 souscriptions a l’événement...
Donc après n clic, chaque événement va se lancer n fois... pas forcement idéal... (piège classique pour les débutants, je me suis fait déjà avoir, et je ne suis certainement pas le seul!)
Enfin, pour la dernière question, je dirai un background worker par bouton, sous réserve que tu gères l'annulation des taches (WorkerSupportsCancellation = true)
La documentation est très claire, n'oublie pas de t'y référer.
EDIT: il va aussi falloir que tu vérifies la portée de tes méthodes. getProcesses n'est pas static, ça va planter... mais VS devrait te le dire!
Partager