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?
To wszystko. Z jakiegoś powodu to GetExecutingAssembly(). Lokalizacja zwróciła inną ścieżkę i nie znajdowała wszystkiego. –