2010-03-10 2 views
7

J'ai une forme qui a de nombreuses méthodes longues. Ma quête est: Quelle est la meilleure pratique? Utilisez une méthode anonyme et un seul backgroundworker ou créez une instance de BackgroundWorker pour chaque méthode longue.Meilleure pratique pour les méthodes longues multiples utilisant l'arrière-plan

Aidez-nous s'il vous plaît. Merci.

+0

Longue comme dans les lignes de code ou longue comme longue course? –

+0

longtemps comme en cours d'exécution. – wallybh

Répondre

2

J'utiliserais personnellement une instance de BackgroundWorker pour chacune de vos tâches. Cependant, gardez à l'esprit que vous pouvez appeler plusieurs fois la même méthode déléguée dans plusieurs instances différentes de thread. En ayant une tâche BackgroundWorker par méthode longue, vous aurez beaucoup de contrôle sur vos méthodes. De plus, autant que je sache, une fois qu'une instance de BackgroundWorker effectue une tâche, elle est occupée par cette tâche de fond et la rend donc indisponible pour d'autres. Peut-être que je me trompe peut-être, mais c'est de toute façon comme je le ferais, car votre gestionnaire d'événements DoWork() ne peut faire que ce qu'on lui demande de faire pour ce BackgroundWorker. Donc, il me semble impossible d'effectuer des tâches totalement différentes pour une seule instance de BackgroundWorker.

Est-ce que cela aide?

+0

Oui, cette aide. Mes longues méthodes n'ont pas d'exécutions consécutives. Je vais utiliser votre recommandation. Désolé pour un mauvais anglais ... – wallybh

+1

Ne vous embêtez pas, je suis francophone! = P Hehehe ... –

+1

Peut-être cela vous aiderait-il si vous divisez votre découplage de votre long-comme-dans-long-fonctionnement-méthode;) en plusieurs morceaux plus petits et schred les petits morceaux dans d'autres BackgroundWorkers multiples. Tout dépend si ces méthodes peuvent être mâchées dans de plus petits morceaux de code, si vous voyez ce que je veux dire. –

2

En résumé:

Avantages dans un BackgroundWorker:

  1. Vous contrôlez l'ordre de l'exécution de la méthode multiple. Cependant, c'est aussi un inconvénient, car si vous utilisez plusieurs BackgroundWorkers, vous "assumez" qu'ils sont exécutés parallèlement et ne doivent pas s'inquiéter de la commande; Moins de temps pour la création et l'élimination des threads (si possible, utilisez la même instance à chaque fois, mais ce n'est pas toujours possible, en fonction de ce qui démarre le processus, ce n'est pas possible si vous voulez le faire simultanément);

  2. Si vous souhaitez communiquer entre threads, vous pouvez accumuler une communication par lots et le faire plus efficacement. De plus, cela peut vous épargner une partie de cette communication si toutes les méthodes sont exécutées dans le même thread.

Avantages en plusieurs BackgroundWorkers:

  1. Le parallélisme mentionné ci-dessus; Chaque fin de processus peut utiliser un autre délégué et effectuer une autre opération.

Espérons que ça aide!

Questions connexes