Je sais que vous pouvez passer des arguments via l'appel de fonction RunWorkerAsync lorsque vous démarrez l'arrière-plan pour la première fois, mais pouvez-vous passer les données après qu'elles ont déjà été démarrées? Ou aurais-je besoin de créer ma propre forme de concurrence pour gérer le transfert de données à partir d'un thread différent?Existe-t-il un moyen d'envoyer des données à BackgroundWorker après son démarrage?
Répondre
Vous aurez besoin d'ajouter de la synchronisation et d'avoir une place pour que l'agent d'arrière-plan puisse lire les données.
Vous ne pouvez pas (facilement) envoyer des données à l'arrière-plan. Il est beaucoup plus facile d'avoir un endroit où le travailleur peut rechercher des données, et vous pouvez simplement ajouter des données à traiter. Assurez-vous simplement de mettre la synchronisation en place sur ce point, puisque (au moins) deux threads accéderont aux données potentiellement au même moment.
Il n'existe aucun mécanisme pris en charge dans l'API BackgroundWorker pour transmettre des données supplémentaires après le démarrage de la tâche.
Toutefois, la routine de travail s'exécute simplement sur un thread différent. Vous pouvez transmettre des données à ce thread de la même manière que vous transmettez des données entre deux threads arbitraires. Quelques exemples rapides sur la façon ...
- Changement d'état sur les variables statiques (probablement mal)
- de changement d'état de l'objet initialement transmis à la routine des travailleurs (encore un mal peu si pas contrôlé correctement)
Vous devez examiner attentivement l'impact de synchronisation de ces approches.
Je préfère utiliser une file d'attente statique que le thread d'arrière-plan qui vérifie périodiquement les nouveaux messages. Cela permet au thread d'arrière-plan de fonctionner à son propre rythme. Vous pouvez utiliser les méthodes de rappel pour retourner au thread principal. Et comme l'a dit Reed, utilisez la synchronisation, comme un objet statique pour verrouiller.
- 1. État des registres après le démarrage
- 2. C# .Net - Comment annuler un BackgroundWorker tirer des données d'un WebService
- 3. Asp.net detailsview - obtenir des données après la mise à jour
- 4. BackgroundWorker Thread dans IIS7 - FAIL!
- 5. Y a-t-il un moyen de dire à un processus avant qu'il ne démarre ou après le démarrage de l'adresse IP à utiliser sur Windows?
- 6. Mise à jour d'une classe après modification de son interface
- 7. Quel est un bon moyen d'assigner un objet modèle à un symbole après l'avoir sauvegardé?
- 8. Conserver une référence à un fichier après son déplacement dans objective-c?
- 9. Lorsque ThreadPool affecte un thread à une instance de Backgroundworker?
- 10. C# BackgroundWorker Discussion Problème
- 11. Comment faire pour actualiser un graphique Flex à chaque fois que des données sont ajoutées à son fournisseur de données?
- 12. Comment annuler et redémarrer correctement un processus BackgroundWorker?
- 13. Démarrage lent pour AVAudioPlayer la première fois un son est joué
- 14. Comment ajouter une autorisation d'exécution à un fichier dans CVS après son archivage?
- 15. Backgroundworker: exception lors de l'annulation
- 16. Stockage des données dans URIs Après Hash
- 17. Puis-je déclencher un événement directement à partir du gestionnaire DoWork de BackgroundWorker?
- 18. Rien ne se passe après le démarrage d'une application de démarrage Web Java
- 19. Comment puis-je obtenir une référence à un nœud directement après son ajout?
- 20. Mettez en surbrillance le texte d'une page après son rendu
- 21. Comment puis-je détruire des données associées à un objet après que l'objet n'existe plus?
- 22. Comment puis-je déclencher un événement sur un BackgroundWorker mocké?
- 23. Un moyen de synchroniser des données entre un périphérique externe et une base de données?
- 24. application ASP.NET sur IIS7 - démarrage très lent après iisreset
- 25. Utilisation des données de noeud après la création du noeud
- 26. Comment transmettre des données à un UITabBarController
- 27. C# backgroundWorker signale une chaîne?
- 28. BackgroundWorker OnWorkCompleted lève l'exception de thread-thread
- 29. Démarrage d'un nouveau processus avec des arguments
- 30. Quand mon exemple BackgroundWorker être des ordures collectées
C'est ce que je pensais, y a-t-il un meilleur exemple producteur/consommateur que Mr Skeets? http://www.yoda.arachsys.com/csharp/threads/deadlocks.shtml – SwDevMan81
Son est une option très propre et discrète. Il serait possible, dans certaines circonstances, d'utiliser un ReaderWriterLock à la place, ce qui pourrait être meilleur (mais seulement dans certains cas), car il ne bloquerait pas les lecteurs. Voir: http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx –
Super, je vais vérifier cela et voir si je peux utiliser cela. Merci – SwDevMan81