2009-02-12 14 views
6

Czy można "zabić" wątek BackgroundWorker?Czy można zabić wątek BackgroundWorker?

W moim zdarzeniu DoWork nie mogę sprawdzić flagi anulowania, ponieważ mam blokujące wywołanie do zewnętrznego interfejsu COM lub zapytanie do bazy danych. CancelAsync nie anuluje połączenia z COM.

Jak mogę to zrobić, proszę? Wszelkie sugestie będą bardzo mile widziane.

Z góry dziękuję.

Odpowiedz

1

Nie jestem świadomy bezpiecznego sposobu na przerwanie wątku.

Pracownik działający w tle może sprawdzić, czy powinien anulować i anulować się sam, ale jeśli jest wyłączony z bazy danych, nie można wiele zrobić, dopóki nie powróci.

Możesz pracować nad wątkiem ThreadPool i po prostu porzucić wątek i rozpocząć nowy, jeśli nie jest już potrzebny (upewniając się, że po powrocie z zapytania db sprawdza, czy powinien anulować, zanim zrobi coś paskudnego). Oczywiście musisz zrównoważyć wydajność i zarządzać synchronizacją wątków. Jeśli przejdziesz tę ścieżkę, możesz rzucić okiem na klasę statyczną Połączone, aby efektywnie zablokować sekcję krytyczną.

3

Nie, nie możesz zabić wątku , możesz spróbować anulować tylko to, co zauważyłeś, ale wymaga to interakcji z samego wątku tła, aby zatrzymać pracę: "Kod roboczy powinien okresowo sprawdzać AnulowanieWłaściwości, aby sprawdzić, czy została ustawiona na wartość true "(c) MSDN

Jeśli potrzebujesz pełnej kontroli nad wątkiem, musisz utworzyć go sam, używając klasy Thread.

+0

Każda dobra próbka z całym źródłem kodu? dzięki –

+0

Szukaj dyskusji na temat wątku, Thread.Abort, ThreadStart. –

Powiązane problemy