C# BackgroundWorker Problem
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
adapter
angezeigt form
anlegen
antwort
aufruf
auslese
blocken
code
datum
fenster
folgendes problem
form
hinweis
methode
packen
problem
programm
server
show
string
-
Hey,
ich habe folgendes Problem unzwar habe ich ein Programm welches beim Starten Daten aus einer DB liest und in eine DataGridView schreibt.
Soweit so gut aber da es relativ viele Daten sind möchte ich das während des DB auslesen so eine progressBar vomTyp Marquee angezeigt wird.
Eigentlich habe ich es geschafft nur praktisch funzt das leider nicht wirklich.
- ProgressBar wird angezeigt, Form wird geschlossen
- Daten werden in GridView geladen
das Problem ist jetzt eigentlich das das Form in der die GridView ist, quasi sofort den Fehler bringt "keine Rückmeldung"
das "Laden" Fenster/Form
public loadingForm() { InitializeComponent(); DBconnection.ConnectionString = "Server=****;User=****;Password=****;Database=****"; backgroundWorker1.RunWorkerAsync(); MainForm.Show(); //Fenster mit GridView wird geöffnet. }
Backgroundworker funktion
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { string strCommand = "SELECT * FROM "; MySqlDataAdapter da = new MySqlDataAdapter(strCommand, DBconnection); DataTable tbl = new DataTable(); da.Fill(tbl); MainForm.dataGridView1.DataSource = tbl; MessageBox.Show("Fertig!"); this.Hide(); //das Fenster wird unsichtbar. (loadingForm) }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Verpacke das ganze mal in einem try{} catch{} Block und lasse dir die Exception ausgeben! Vielleicht findest du darin den Hinweis, warum das Ganze nicht funktioniert.
-
Hoffe die Antwort kommt nicht zu spät.
Lege mal den Adapter und die DataTable im HauptThread an und verpack diese Zeile aus der BackWorker Methode:
MainForm.dataGridView1.DataSource = tbl;
und verpack sie in ein Invoke
//einen delegate anlegen delegate void del_FillDataTable(DataTable tbl); //... MainForm.Invoke(new del_FillDataTable(FillDataTable), new object[] {tbl /* ist der Parabeter*/ }); //... FillDataTable(DataTable tbl) { MainForm.dataGridView1.DataSource = tbl; }
PS: musst alles "Invoken", was im HauptThread erzeugt wurde und im BackWorker verwendet wird.
Beitrag zuletzt geändert: 3.3.2010 18:14:31 von primenic -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage