Disons que je veux envoyer un paramètre int à un travailleur d'arrière-plan, comment cela peut-il être accompli?
private void worker_DoWork(object sender, DoWorkEventArgs e) {
}
Je sais quand il s'agit de worker.RunWorkerAsync () ;, Je ne comprends pas comment définir dans worker_DoWork qu'il devrait prendre un paramètre int.
c#
backgroundworker
sooprise
la source
la source
Tuple<A,B>
(C # 4 +) (Edit: Oui, utilisez un objet pour tout emballer. Voir par exemple DoWorkEventArgs self).label1.Text = e.Result.ToString();
partout j'ai marqué cela comme sûr.Même s'il s'agit d'une question déjà répondue, je laisserais une autre option que l'OMI est beaucoup plus facile à lire:
Et sur la méthode du gestionnaire:
la source
... => WorkerDoWork(a, b, c);
tant qu'ils correspondent à la signature de la méthode... WorkerDoWork(int a, string b, string c) {...
Vous pouvez passer plusieurs arguments comme celui-ci.
la source
Tuple
(ou une classe spécialisée) plutôt qu'une liste d'objets génériquesVous pouvez utiliser la
DoWorkEventArgs.Argument
propriété.Un exemple complet (même en utilisant un argument int) peut être trouvé sur le site de Microsoft:
la source
Découvrez la propriété DoWorkEventArgs.Argument :
la source
vous pouvez essayer ceci si vous voulez passer plus d'un type d'arguments, ajoutez-les d'abord tous à un tableau de type Object et passez cet objet à RunWorkerAsync () voici un exemple:
Maintenant dans la méthode doWork de background worker
la source
Vous avez besoin de la méthode RunWorkerAsync (objet) et de la propriété DoWorkEventArgs.Argument .
la source
Vous devez toujours essayer d'utiliser un objet composite avec des types concrets (en utilisant un modèle de conception composite) plutôt qu'une liste de types d'objets. Qui se souviendrait de ce qu'est diable chacun de ces objets? Pensez à la maintenance de votre code plus tard ... Essayez plutôt quelque chose comme ceci:
Puis:
puis:
la source