2010-12-20 7 views
5

C#, mit VS2010 und ich habe etwas, das keinen Sinn macht.C#: Warum wird meine Hintergrund-Worker-Thread-Signalisierung ausgeführt, wenn dies nicht der Fall ist?

Beim Start muss mein Programm mehrere hundert k aus Textdateien laden. Nachdem sichergestellt wurde, dass der Ladecode einwandfrei funktionierte, warf ich ihn in einen Hintergrundthread. Solange dies innerhalb der IDE ausgeführt wird, ist alles in Ordnung, aber wenn es eigenständig ausgeführt wird, sagt der Thread, dass es fertig ist, wenn es nicht ist. Das geht natürlich boomt.

Der Trigger-Code:

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

und die Sachen, die Boom los ist ist in DatabaseLoaded().

habe ich einige Message zu verfolgen, was los ist: Die erste und letzte Zeile der Load() Methode und die ersten Zeile der DatabaseLoaded().

In der IDE löst dies wie erwartet aus: Load() Anfang, Load() getan, DatabaseLoaded(). Jedoch, wenn es eigenständig ausgeführt wird, bekomme ich Load() Anfang, DatabaseLoaded() und dann die unbehandelte Ausnahme-Box (der Lader hat nicht einmal leere Tabellen zu bauen, geschweige denn sie zu füllen.)

Bin ich verrückt oder ist Microsoft?

Antwort

17

RunWorkerCompleted wird im Falle eines Fehlers aufgerufen (z. B. eine nicht behandelte Ausnahme in Database.Load()). Überprüfen Sie die Error Eigenschaft der RunWorkerCompletedEventArgs.

+0

Das war's. Aus irgendeinem Grund GetExecutingAssembly(). Location gab einen anderen Pfad zurück und es wurde nicht alles gefunden. –

4

Es ist wahrscheinlich eine Ausnahme von Database.Load() geworfen. BackgroundWorker fängt eine nicht behandelte Ausnahme ab, bevor das Ereignis RunWorkerCompleted ausgelöst wird. Überprüfen Sie die RunWorkerCompletedEventArgs.Error Eigenschaft in DatabaseLoaded.

+0

Gibt es ein Echo hier? – Gabe

+0

:-) nur zwei Antworten fast zur gleichen Zeit gepostet ... Wird interessant sein zu sehen, wer mehr upvotes bekommen wird :-D –

+0

Eigentlich war Ihre wurde 5 Minuten später veröffentlicht. – Gabe

Verwandte Themen