2010-03-10 12 views

Odpowiedz

2

Personalnie użyłbym jednego wystąpienia usługi BackgroundWorker dla każdego zadania. Należy jednak pamiętać, że można wywołać kilka razy tę samą metodę delegowania w wielu różnych wystąpieniach wątku.

Dzięki jednemu narzędziu działającemu w tle na zadanie z długimi metodami, będziesz mieć pełną kontrolę nad swoimi metodami. Ponadto, jeśli chodzi o moje zrozumienie, gdy wystąpienie BackgroundWorker wykonuje zadanie, jest zajęty tym zadaniem w tle i dlatego czyni go niedostępnym dla innych. Być może jednak się mylę, ale to jest sposób, w jaki bym to zrobił, ponieważ program do obsługi zdarzeń DoWork() może wykonywać tylko to, co jest wymagane do wykonania tego BackgroundWorker. Wydaje mi się więc niemożliwe wykonywanie całkowicie różnych zadań tylko dla jednego wystąpienia BackgroundWorker.

Czy to pomaga?

+0

Tak, ta pomoc. Moje długie metody nie mają kolejnych przebiegów. Użyję ci rekomendacji. Przepraszam za słaby angielski ... – wallybh

+1

Nie zawracaj sobie głowy, jestem frankofonem! = P Hehehe ... –

+1

Być może pomogłoby to, gdybyś podzielił twoją odległą metodę na długą, działającą;) na wiele mniejszych części i schred te małe kawałki do innych wielu BackgroundWorkers. Wszystko zależy od tego, czy te metody można żuć na mniejsze fragmenty kodu, jeśli widzisz, co mam na myśli. –

2

Podsumowując:

Zalety w jednym BackgroundWorker:

  1. można kontrolować kolejność wykonywania dla wielu metod. Jest to jednak również wadą, ponieważ jeśli używasz wielu BackgroundWorkers, "zakładasz", że są wykonywane równolegle i nie musisz martwić się o zamówienie;

  2. Mniejszy nakład czasu na tworzenie i usuwanie wątków (jeśli to możliwe, używaj tego samego egzemplarza za każdym razem, ale nie zawsze jest to możliwe, w zależności od tego, co uruchamia proces.) Nie jest możliwe, jeśli chcesz, aby było to wykonywane jednocześnie);

  3. Jeśli chcesz się komunikować między wątkami, możesz zebrać komunikację wsadową i zrobić to wydajniej. Co więcej, może zaoszczędzić ci trochę tej komunikacji, jeśli wszystkie metody są uruchomione w tym samym wątku.

Zalety w wielu BackgroundWorkers:

  1. Wspomniany równoległość;

  2. Każdy koniec procesu może korzystać z innego uczestnika, a zatem wykonać inną operację.

Mam nadzieję, że pomoże!

Powiązane problemy