2009-06-04 7 views
1

Dieses Brennen ist das Setup ich habe, dieser Code funktioniertC# Background Anomaly DoWork Ereignis nicht

private void butGo_Click(object sender, EventArgs e) 
{ 
    threadCreateImages.RunWorkerAsync(); 
} 


private void threadCreateImages_DoWork(object sender, DoWorkEventArgs e) 
{ 
    PatientToHL7MSHManager tvPatientToHL7MSHManager = new PatientToHL7MSHManager(); 
    tvPatientToHL7MSHManager.LoadByMSHID(""); 
} 


private void threadCreateImages_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    MessageBox.Show("DONE"); 
} 

wenn ich diese Linie tvPatientToHL7MSHManager.LoadByMSHID ("") verändern; bis tvPatientToHL7MSHManager.LoadByPatientID ("");

Es überspringt das DoWork-Ereignis und geht direkt zum RunWorkerCompleted-Ereignis.

Der einzige Unterschied zwischen LoadByMSHID und LoadByPatientID ist der Filter der SQL-Anweisung, außerdem ist der Codepfad identisch.

Der Code funktioniert ordnungsgemäß ohne den Hintergrundthread.

Alle Ideen oder Vorschläge würden sehr geschätzt werden.

Antwort

9

Wahrscheinlich wird eine Ausnahme ausgelöst. Überprüfen Sie in Ihrem RunWorkerCompleted-Ereignis die Error-Eigenschaft des RunWorkerCompletedEventArgs-Werts, der übergeben wird.

BackgroundWorkers löst keine Ausnahmen bis zu dem Hauptthread, wenn sie auftreten. Stattdessen müssen Sie auf dem RunWorkerCompleted-Ereignis nach ihnen suchen.

0

Ich bin mir nicht sicher, was das Problem war, aber das Problem wurde behoben.

Initial hatte ich gerade die business.dll in den bin-Ordner kopiert und referenziert, jedoch enthielt der Ordner eine ältere business.obj-Datei. Wenn ich sowohl die Datei business.dll als auch die Datei business.obj kopierte, ging das Problem verloren.