J'essaie de travailler avec Threadding
et il me semble que c'est étrangement difficile (je le fais probablement mal).C# - Les threads peuvent-ils se comporter comme BackgroundWorkers (winForms)?
Je veux charger un fichier à l'intérieur d'un BackgroundWorker
et pendant ce temps, "envoyer" chaque nouvelle ligne à un thread distinct (pas bgWorker). J'utilise BlockingCollection
et Add()
chaque ligne, puis je veux Take()
eux et les traiter dans un autre thread.
Maintenant, tout est simple avec le BgWorker; mais pourquoi est-il impossible (n'est-ce pas?) de simplement déclarer un nouveau fil dans Form1.cs
et de le faire fonctionner comme le BgWorker? En d'autres termes, pourquoi devez-vous créer un WorkerClass distinct (http://msdn.microsoft.com/en-us/library/7a2f3ay4(VS.80).aspx)? Je demande cela parce que, vous pouvez accéder à votre BlockingCollection amende à partir de BackgroundWorker, mais vous ne pouvez pas le faire à partir d'une classe distincte WorkerClass (car il s'agit d'une classe distincte plaine vanille). (Alors quel est le point de la BlockingCollection alors si vous ne pouvez pas l'utiliser pour ce que cela signifie?)
De plus, BgWorkers a un événement/méthode ReportProgress(...)
. Pour autant que je sache, si vous utilisez cet exemple msdn, vous n'avez pas squat dans votre Thread.
Qu'est-ce qui me manque ici? S'il vous plaît aider.
PS: Avant de sauter et de me dire que c'est en aucune façon plus efficace d'envoyer des lignes à un autre fil, sachez que je fais cela comme un exercice d'apprentissage. Essayer de comprendre comment les Threads fonctionnent en C# et comment vous synchronisez/communiquez entre eux (et/ou bgWorkers).
Si vous voulez apprendre comment fonctionnent les threads, n'utilisez pas BGW, cela vous évitera trop de problèmes. –
Si vous utilisez BlockingCollection, vous êtes sur Fx4 et vous devriez regarder dans Tâches (TPL) plutôt que des discussions. –
@ Henk; Mec. Merci. (Je vais encore regarder dans les threads mais) Merci de me parler de l'existence de 'System.Threading.Tasks'. Que le dossier montre que c'est "ce que je voulais" (BlockingCollection + Tasks): http://www.codethinked.com/post/2010/02/08/BlockingCollection-and-IProducerConsumerCollection.aspx – Spectraljump