Problema aggiornamento form

giovedì 01 aprile 2010 - 13.30

sarto76 Profilo | Junior Member

Ciao a tutti,
ho un form con alcuni controlli (3 ckeckbox, 1 picturebox, alcuni bottoni...), che creo a livello di design (non da codice).
Nel form load ho una procedura che mi carica diversi dati da DB (con un ciclo for), la quale può impiegare fino a 10 secondi.
Per non far sì di avere tutti i miei controlli senza alcun testo al loro interno (finchè non finisce la procedura sul database restano lì in "standby"), volevo far sì che mi apparisse un pannello che occupasse tutto lo spazio, con al suo interno una progress bar e un label (loading...). Appena finisce la procedura sul DB il pannello sparisce e mi appare il form sotto.
Il problema è che sul pannello creato la progressbar funziona (la faccio incrementare in base al ciclo for sul DB), ma il label non mi appare finchè la famosa procedura sul db (con il for) non termina. Spero di esere stato chiaro...
COme posso fare?
Grazie mille a tutti
Massimo

kataklisma Profilo | Senior Member

Ciao!

La soluzione migliore è gestire il "loading" in un thread diverso.

Prova a dare un'occhiata alle mie risposte su questo thread : http://www.dotnethell.it/Forum/messages.aspx?ThreadID=34945

e dimmi se risolvi o meno!


Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

sarto76 Profilo | Junior Member

Grazie mille del suggerimento...
ho provato, nel load faccio partire una thread che crea il pannello, ci mette il label e la progress bar,
ma quando dò questo comando this.Controls.Add(this.Pprogress);
mi dice che ho una chiamata cross-thread. Ho capito di cosa si tratta ma come lo risolvo? IO voglio che il pannello si posizioni davanti agli altri controlli che sta elaborando nel thread principale...
Grazie mille
ciao

kataklisma Profilo | Senior Member

La chiamata è ovviamente cross thread in quanto non puoi chiamare un'oggetto da un thread diverso da quello che l'ha creato!

Dovresti creare una routine che modifichi il controllo, un delegate che punti ad essa e tramite il metodo Invoke del controllo far partire il delegate.
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5