Ich möchte aus einer Tabelle, die häufig sehr groß ist, Daten auslesen und in ein Datagrid schreiben.
Um nicht die gesamte Anwendung zu blockieren, führe ich diese Prozedur in der DoWork-Methode eines Backgroundworkers aus.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { OleDbCommand Befehl = new OleDbCommand(); if (treeView_Tabellen.InvokeRequired) { treeView_Tabellen.Invoke(new MethodInvoker(DatenAuslesen)); return; }
Befehl.CommandText = "SELECT * FROM [" + this.treeView_Tabellen.SelectedNode.Text + "]"; Befehl.Connection = DatenbankverbindungQuelle; OleDbDataAdapter DatenAdapter = new OleDbDataAdapter(Befehl); DataTable Tabelle = new DataTable(); Tabelle.Locale = System.Globalization.CultureInfo.InvariantCulture;
DatenAdapter.Fill(Tabelle); dataGridView_TabellenInhalt.DataSource = Tabelle; } |
Während dieser Backgroundworker die Daten ausliest, soll ein Progressbar im Marquee-Style permanent durchlaufen. Das klappt aber nicht; sowie der Backgroundworker-Prozess startet, verschwindet der Progressbar auf dem Formular.
Zum Test habe ich statt des Datenbankauslesens mal ein Thread.Sleep(3000) eingebaut, dann funktioniert das Ganze wie gewollt: Im Thread wird die 3 Sekunden gewartet, gleichzeitig fährt der Progressbar permanent weiter.