BackgroundWorker Renvoyer Une Valeur?
Le code suivant ajoute les nombres de 1 à 100 et renvoie la somme. Ce que j'essaie de faire est de lancer les calculs dans un backgroundworker et de retourner une valeur. Le problème, c'est que returnValue est retourné avant DoWork complète. Comment puis-je attendre mon fond travailleur à remplir avant de retourner une valeur? (Je n'arrive pas à mettre le retour dans mon DoWork...)
double returnValue = 0;
var b = new BackgroundWorker();
b.DoWork += new DoWorkEventHandler(
delegate(object sender, DoWorkEventArgs e) {
for(int i=0;i<100;i++){
returnValue += (i+1);
}
}
);
b.RunWorkerAsync();
return returnValue;
Addendum: il Serait mieux d'envoyer un message de la pompe sur le même thread au lieu de l'exécution de cette, dans un contexte de travail?
Aussi, c'est juste un exemple de code, mon code actuel prend plus d'une minute pour terminer.
Presque la même question que stackoverflow.com/questions/939635/...
Possible en double stackoverflow.com/questions/5182782/...
Ce que vous demandez de faire n'a pas de sens; vous essayez d'exécuter du code sur la
Possible en double stackoverflow.com/questions/5182782/...
Ce que vous demandez de faire n'a pas de sens; vous essayez d'exécuter du code sur la
BackgroundWorker
, mais vous voulez aussi de bloquer l'appel de la méthode de retour jusqu'à ce que le BackgroundWorker
est fait.
OriginalL'auteur sooprise | 2011-03-07
Vous devez vous connecter pour publier un commentaire.
Abonnez-vous à la
RunWorkerCompleted
événement. Cet événement contient la valeur de retour de l'opération en arrière-plan.Bien sûr, cette valeur serait retourné à partir de l'intérieur de la
DoWorkEventHandler
, comme suit:pas travaillé.erreur DoWorkEventHandler revient vide, un mot-clé ne doit pas être suivi par un objet
OriginalL'auteur Jon
Je ne vois pas vraiment une question, mais je pense que vous êtes à la recherche pour l'événement est-il appelé
RunWorkerCompleted
. Qui obtient soulevées lors de laDoWork
délégué complète. Si ce n'est pas ce que vous cherchez, je pense que vous avez besoin de reformuler votre question.OriginalL'auteur Bryan
j'ai postet un exemple: ici
peut-être que cela peut vous aider 🙂
cela peut être l'effet de la async commencer. vous pouvez dire le backgroundworker de démarrer ou d'dis juste de commencer. si vous n'avez pas explicite dire qu'il doit commencer MAINTENANT, il commence quand le c# pense que c'est un bon moment pour commencer 🙂
OriginalL'auteur jwillmer
Que vous essayez de faire une opération synchrone avec BackgroundWorker qui il MAUVAIS. Mais si vous devez, vous pouvez utiliser le IsBusy drapeau.
exactement. mais si il doit attendre le BackgroundWorker pour finir alors pourquoi utiliser BackgroundWorker ?
Serait un message de la pompe de mieux?
comme
Application.DoEvents();
? assurez-vousApplication Appelante.DoEvents est presque toujours une mauvaise idée. msdn essaie de faire ce clair, mais n'a pas, à mon humble avis, mettre suffisamment l'accent sur la gravité de la une idée qu'elle est. msdn.microsoft.com/en-us/library/...
OriginalL'auteur Bala R