2010-12-20 8 views
5

C#, używając VS2010 i mam coś, co nie ma sensu.C#: Dlaczego sygnalizacja wątku pracownika tła jest wykonywana, gdy nie jest?

Podczas uruchamiania mój program musi załadować kilkaset kz plików tekstowych. Po upewnieniu się, że kod ładujący działał poprawnie, rzuciłem go w wątek tła. Dopóki jest to uruchamiane z poziomu IDE, wszystko jest w porządku, ale gdy jest uruchamiane samodzielnie, wątek mówi, że jest wykonywany, gdy nie jest. To oczywiście idzie w górę.

Kod wyzwalania:

BackgroundWorker Background = new BackgroundWorker(); 
Background.RunWorkerCompleted += new RunWorkerCompletedEventHandler(DatabaseLoaded); 
Background.DoWork += new DoWorkEventHandler(delegate { Database.Load(); }); 
Background.RunWorkerAsync(); 

i rzeczy, które się dzieje wysięgnik jest w DatabaseLoaded().

Umieszczam kilka okien komunikatów, aby śledzić, co się dzieje: Pierwsza i ostatnia linia metody Load() i pierwsza linia DatabaseLoaded().

W IDE wyzwala to tak, jak się spodziewam: Load() początek, Load() zrobione, DatabaseLoaded(). Jednak po uruchomieniu samodzielnym otrzymuję Load() na początku, DatabaseLoaded(), a następnie nieobsługiwane pudełko wyjątków (program ładujący nawet nie zbudował pustych tabel, nie mówiąc już o ich wypełnieniu).

Czy ja jestem orzechowcem czy Microsoft?

Odpowiedz

17

RunWorkerCompleted zostanie wywołany w przypadku błędu (takiego jak nieobsługiwany wyjątek w Database.Load()). Sprawdź właściwość Error urządzenia RunWorkerCompletedEventArgs.

+0

To wszystko. Z jakiegoś powodu to GetExecutingAssembly(). Lokalizacja zwróciła inną ścieżkę i nie znajdowała wszystkiego. –

4

Prawdopodobnie istnieje wyjątek zgłoszony przez Database.Load(). BackgroundWorker przechwytuje każdy nieobsługiwany wyjątek przed wywołaniem zdarzenia RunWorkerCompleted. Sprawdź właściwość RunWorkerCompletedEventArgs.Error w DatabaseLoaded.

+0

Czy jest tu echo? – Gabe

+0

:-) tylko dwie odpowiedzi opublikowane prawie jednocześnie ... Będzie ciekawie oglądać, kto będzie miał więcej upvotes :-D –

+0

W rzeczywistości twoja została wysłana 5 minut później. – Gabe

Powiązane problemy