Utilisation de paramètres dans les gestionnaires BackgroundWorker
Pour la transmission des données à un BackgroundWorker
's DoWork
je utiliser une classe wrapper' exemple:
MyParams mpar = new MyParams();
...
mpar.Par1 = par1val;
mpar.Par2 = par2val;
mpar.Par3 = par3val;
...
var worker1 = new System.ComponentModel.BackgroundWorker();
worker1.DoWork += new DoWorkEventHandler(worker1_DoWork);
worker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker1_RunWorkerCompleted);
worker1.RunWorkerAsync(mpar);
Alors je peux utiliser les paramètres de mpar
instance dans worker1_DoWork
d'exploitation dans un autre thread.
void worker1_DoWork(object sender, DoWorkEventArgs e)
{
//here we use mpar.Par1, mpar.Par2 and so on
}
Dans RunWorkerCompletedEventHandler
nous faire un peu de postactions dans le thread de l'INTERFACE utilisateur.
Ma question est : Peut-on utiliser dans RunWorkerCompleted
gestionnaire de la mpar
exemple, qui a travaillé juste avant, dans DoWork
gestionnaire et pouvons-nous être sûr que ses valeurs sont les mêmes qu'il avait dans DoWork
? Si non, quelle est la bonne approche pour le partage de paramètres pour les différentes étapes de BackgroundWorker
opération?
void worker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Dispatcher.BeginInvoke((Action)(() =>
{
//Can we use the mpar instance here?
}
));
}
source d'informationauteur rem | 2011-06-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez affecter la valeur de
e.Result
dansworker1_DoWork
Alors vous pouvez l'obtenir dans la
worker1_RunWorkerCompleted
danse.Result
.Si vous avez besoin pour passer de résultat supplémentaire de la valeur et que vous ne voulez pas mettre de MyParams objet dans le
worker1_DoWork: e.Result
- ensuite, vous pouvez créer une petite classeResultHolder
avecMyParams
etMyResult
que les propriétés et l'utilisation de cette classe pour passer le résultat dansworker1_DoWork