kostenloser Webspace werbefrei: lima-city


C# BackgroundWorker Problem

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    myhead

    myhead hat kostenlosen Webspace.

    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)
    }
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. Autor dieses Themas

    myhead

    myhead hat kostenlosen Webspace.

    also das mit der mysql-connection funzt soweit, falls du das meinst, aber werde mal ein Try Catch um die Background Fkt. Aufruf packen.


    ich habe eher das Gefühl, das der Prozess/thread nicht beendet wird

    Beitrag zuletzt geändert: 18.2.2010 14:38:45 von myhead
  5. 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
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!