Backgroundworker-Frage

15/04/2008 - 09:39 von Peter Förster | Report spam
Hallo!

Ich habe da mal ein kleines Problem mit der Backgroundworker-Komponente im
VS 2005! Im Form_Load Ereignis eines Fensters lade ich meine Daten aus einer
Datenbank. Da dieser Vorgang halt mal "etwas" lànger dauern könnte hab ich
mir gedacht, dass wàhrend des Ladevorgangs ein kleines Fenster aufgeht, auf
dem sich eine Progressbar (Style: Marquee) befindet. Dieses Fenster soll
dann so lange angezeigt werden, bis die Daten geladen worden sind und das
Fenster angezeigt wird.
Folgende Vorgehensweise habe ich u.a. versucht:

private void Form_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();

// Laden meiner Daten

backgroundWorker1.CancelAsync();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
frmLoadWindow.ShowDialog();
}

private void backgroundWorker1_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
frmLoadWindow.Close();
}

Bei dieser Vorgehensweise, schließt er leider nicht das Fenster, wenn ich
"RunWorkerCompleted" aufrufe.
Ins Ereignis "RunWorkerCompleted" geht er erst rein, wenn man das Fenster
über das "x" oben rechts schließt und nicht über den Aufruf
"backgroundWorker1.CancelAsync();". Wie kann man es hinbekommen, dass er
nachdem Laden meiner Daten das Fenster schließt?

Gruß
Peter Förster
 

Lesen sie die antworten

#1 Alain Boss
15/04/2008 - 17:17 | Warnen spam
Peter Förster schrieb:
Hallo!

Ich habe da mal ein kleines Problem mit der Backgroundworker-Komponente im
VS 2005! Im Form_Load Ereignis eines Fensters lade ich meine Daten aus einer
Datenbank. Da dieser Vorgang halt mal "etwas" lànger dauern könnte hab ich
mir gedacht, dass wàhrend des Ladevorgangs ein kleines Fenster aufgeht, auf
dem sich eine Progressbar (Style: Marquee) befindet. Dieses Fenster soll
dann so lange angezeigt werden, bis die Daten geladen worden sind und das
Fenster angezeigt wird.
Folgende Vorgehensweise habe ich u.a. versucht:

private void Form_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();

// Laden meiner Daten

backgroundWorker1.CancelAsync();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
frmLoadWindow.ShowDialog();
}

private void backgroundWorker1_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
frmLoadWindow.Close();
}

Bei dieser Vorgehensweise, schließt er leider nicht das Fenster, wenn ich
"RunWorkerCompleted" aufrufe.
Ins Ereignis "RunWorkerCompleted" geht er erst rein, wenn man das Fenster
über das "x" oben rechts schließt und nicht über den Aufruf
"backgroundWorker1.CancelAsync();". Wie kann man es hinbekommen, dass er
nachdem Laden meiner Daten das Fenster schließt?

Gruß
Peter Förster




Ich bin etwas ausser Übung. Aber das Laden der Daten steht für mich am
falschen Ort. Meiner Meinung nach müsstest du das in
backgroundWorker1_DoWork() erledigen. Mit RunWorkerAsync() startest du
den BackgroundWorker und dann schiesst du ihn gleich wieder ab.

Das problem ist, dass deine DoWork() methode sofort zurückkehrt.

Also eher so:

private void Form_Load(object sender, EventArgs e)
{
frmLoadWindow.ShowDialog();
backgroundWorker1.RunWorkerAsync();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// Laden meiner Daten
}

private void backgroundWorker1_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
// hier kannst du noch überprüfen was passiert ist
frmLoadWindow.Close();
}

Ähnliche fragen