Laden...

Table Adapter füllen, ohne dass das GUI blockiert

Erstellt von GNewmann vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.925 Views
Thema geschlossen
G
GNewmann Themenstarter:in
90 Beiträge seit 2006
vor 13 Jahren
Table Adapter füllen, ohne dass das GUI blockiert

Hallo Liebe myCSharp Gemeinde,

ich habe ein Problem dass ich leider nicht selbständig lösen kann.. (ich gebe zu Threading ist wirklich nicht meine Stärke).

Meine Software lädt zu beginn diverse Text-Boxen sowie List-Boxen über eine Binding Source.

Beim Main_Load greife ich dann zu Beginn auf meine Methode "fill_ListView" um z.B. alle meine List Views mit Daten zu füllen.

Dies dauert (bedingt an der Datenmenge) 2-3 Sekunden. Hier würde ich gerne User- freundlich eine kleine TextBox mit ggf. Ladebalken anzeigen, bis alle Controls mit Daten gefüllt sind.

Ich habe versucht die Methode über einen Invoke aufzurufen.. in diesem Invoke rufe ich dann eine Form auf, die mir eine Meldung "bitte warten" anzeigt. Nach dem CheapGUIAccess lasse ich in meiner ursprünglichen Form die Methode aufrufen um die Felder zu füllen.. leider ohne Erfolg, die Felder bleiben "Daten" - leer.

Hier ein Codeauszug:

        private void Main_Load(object sender, EventArgs e)
        {
            this.pe_import_histTableAdapter.Select(this.pEDataSet.pe_import_hist);
            System.Threading.ThreadPool.QueueUserWorkItem(startProcesses);
        }

        void DoCheapGuiAccess()
        {
            if (InvokeRequired)
            { 
                Invoke(new MethodInvoker(DoCheapGuiAccess));
                return;
            }
            myLoader.Show();
        }



        public void startProcesses(Object dummy)
        {
            DoCheapGuiAccess();
            fill_TableAdapter();
        }

Vielen Dank für jeglichen Hinweis / Hilfe.

Grüße

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo GNewmann,

wie schon in [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke) und [FAQ] Warum blockiert mein GUI? beschrieben, müssen die langlaufenden Aktionen im Worker-Thread und die GUI-Zugriffe im GUI-Thread laufen. Bei dir geht das noch Kreuz und Quer. Wenn fill_TableAdapter() auf Controls zugreift und so klingt das, darfst du die Methode nicht aus dem Worker-Thread heraus aufrufen. Anderseits kannst du dir den Klimmzug mit dem Show komplett sparen, wenn du das Show einfach vor dem QueueUserWorkItem aufrufst. Das TableAdapter.Select muss dagegen in den Worker-Thread.

herbivore

Thema geschlossen