Comment définissez-vous UserState dans l'objet RunWorkerCompletedEventArgs?
SALUT à tous.
J'ai un tableau de BackgroundWorker objets instances en cours d'exécution d'un Travailleur de la classe. Lorsque j'appelle le Travailleur de la classe de l'instance de l'objet est-il de la chose et s'écoule ensuite de code (la boucle se termine). Je suis à l'écoute de l'RunWorkerCompleted() événement, mais lorsqu'il appelle le délégué que j'ai mis en place j'ai besoin de savoir qui de mes Travailleur objets tout juste de terminer.
Je vois un UserState propriété dans le RunWorkerCompletedEventArgs qui vient à mon délégué, mais je n'ai aucune idée de comment régler ça dans ma Travailleur objet de finition.
Des idées?
extrait de mon WorkManager.cs de la classe
public Worker AddWorker()
{
Worker w = new Worker();
_workers.Add(w.WorkerID,w);
BackgroundWorker bg = new BackgroundWorker();
_bgworkers.Add(bg);
bg.DoWork += w.Start;
bg.WorkerReportsProgress = true;
bg.WorkerSupportsCancellation = true;
bg.ProgressChanged += ProcessWorkerMessage;
bg.RunWorkerCompleted += WorkerFinished;
w.WorkManager = this;
w.BackgroundWorker = bg;
bg.RunWorkerAsync(w);
return w;
}
public void WorkerFinished(object sender, RunWorkerCompletedEventArgs e)
{
if (_onManagerEvent != null)
_onManagerEvent(new ManagerEvent { EventDate = DateTime.Now, Message = "Worker ??? successfully ended." });
}
Alors, quand mon objet Worker termine la boucle dans sa méthode Start (), que dois-je faire pour remplir le userState propriété de la RunWorkerCompleteEventArgs objet "e" qui est passé à mon WorkerFinished méthode()?
Grâce
source d'informationauteur sisdog
Vous devez vous connecter pour publier un commentaire.
Votre
Start
méthode sur laWorker
classe peut définir laResult
propriété de laDoWorkEventArgs
argument. Voici un exemple:Puis dans la finition gestionnaire d'événement, vous pouvez récupérer les e.Résultat:
Que
UserState
chose, c'est un bogue connu dansBackgroundWorker
:http://www.pluralsight-training.net/community/blogs/mike/archive/2005/10/21/15783.aspx (archive.org lien d'origine...le lien est mort)
Ce que j'ai fait dans le passé, lorsque j'ai été dans votre situation soit utiliser
RunWorkerCompletedEventArgs.Result
(Philip suggère), ou, si possible, avoir mon travailleur de dériver à partir deBackgroundWorker
(alors que je peux ajouter que beaucoup plus de l'état que je veux, et d'obtenir l'ensemble du travailleur en tant qu'expéditeur argument aux événements déclenchés parBackgroundWorker
tout en étant capable d'utiliserResult
pour son usage prévu).