Passage d'une méthode à un backgroundworker dowork
Dans le code ci-dessous, il est un moyen pour, au lieu de toujours s'abonner à la updateWorker_DoWork méthode, passer d'une méthode comme ceci
public void GetUpdates(SomeObject blah)
{
//...
updateWorker.DoWork += new DoWorkEventHandler(blah);
//...
}
public void GetUpdates()
{
//Set up worker
updateWorker.WorkerReportsProgress = true;
updateWorker.WorkerSupportsCancellation = true;
updateWorker.DoWork += new DoWorkEventHandler(updateWorker_DoWork);
updateWorker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(updateWorker_RunWorkerCompleted);
updateWorker.ProgressChanged +=
new ProgressChangedEventHandler(updateWorker_ProgressChanged);
//Run worker
_canCancelWorker = true;
updateWorker.RunWorkerAsync();
//Initial Progress zero percent event
_thes.UpdateProgress(0);
}
Vous devez vous connecter pour publier un commentaire.
Pour votre
RunWorkerAsync()
vous pouvez passer n'importe quel argument vous le souhaitez. Vous pouvez simplement mettre unFunc()
ouAction()
en elle et dans votreDoWork()
que vous venez de convertir l'objet en arrière à ce type spécifique et de l'appeler.Exemples sont ici et ici.
Func()
. J'ai mis à jour l'exemple pour refléter cela.Si je n'ai pas mal vous comprendre, vous avez besoin des expressions lambda pour construire méthode anonyme.
Maintenant, vous n'avez pas besoin de toujours écrire une méthode et de le passer à
new DoWorkEventHandler(myMethod)
Travaillé dessus, a été plus simple que je ne le pensais. Juste eu à faire un délégué pour la méthode appelée sur DoWork. Devrait probablement avoir formulé ma question initiale mieux.