Form "bloccata"...

lunedì 08 dicembre 2008 - 16.30

the_angel Profilo | Newbie

Ciao ragazzi,

Sono nuovo ed è la prima volta che "uso" attivamente il forum...!

Avrei un piccolo problema...sto sviluppando un programma in vb.net , framework 2 :
Ho diverse form, tra cui alcune che elaborano grosse quantità di dati (prese da un database sql compact)...
quanto parte l'elaborazione (che poi va a buon fine), le form stesse diventano "bianche", vuote e tutto sembra bloccato (anche se in realtà gira...)

per cercare di ovviare al problema (perchè sono sicuro, che l'utente giustamente creda che si sia bloccato...) ho creato una piccola form con una barra di caricamento...funziona...ma quando la molte è tanta, anche quì..finestra semi-bianca...

c'è modo di attendere che graficamente la form sia tutta caricata, anche se più lento?
o altre soluzioni per far capire che non si è bloccato tutto?

grazie anticipatamente a tutti!
Angelo

0v3rCl0ck Profilo | Guru

>Ciao ragazzi,

Ciao

>
>Sono nuovo ed è la prima volta che "uso" attivamente il forum...!

Un benvenuto da parte di tutto il forum

>
>Avrei un piccolo problema...sto sviluppando un programma in vb.net
>, framework 2 :
>Ho diverse form, tra cui alcune che elaborano grosse quantità
>di dati (prese da un database sql compact)...
>quanto parte l'elaborazione (che poi va a buon fine), le form
>stesse diventano "bianche", vuote e tutto sembra bloccato (anche
>se in realtà gira...)
>
>per cercare di ovviare al problema (perchè sono sicuro, che l'utente
>giustamente creda che si sia bloccato...) ho creato una piccola
>form con una barra di caricamento...funziona...ma quando la molte
>è tanta, anche quì..finestra semi-bianca...
>
>c'è modo di attendere che graficamente la form sia tutta caricata,
>anche se più lento?
>o altre soluzioni per far capire che non si è bloccato tutto?

Pensato ad una soluzione multi-threading? Fare partire l'elaborazione pesante su un altro thread, staccato da quello principale, in questo modo puoi gestirti anche una barra di avanzamento (progressBar), oppure semplicemente fai vedere un animazione.

>
>grazie anticipatamente a tutti!
>Angelo

Enjoy It

-------------------------------------------------------------------
Michael Denny
Senior Software Developer - Microsoft Framework (C# ASP.NET VB.NET)
http://blogs.dotnethell.it/Regulator/

Teech Profilo | Expert

Soluzione elegante: puoi usare i Thread...

Soluzione poco elegante (anzi peggio, ma funziona): siccome ipotizzo che ci sia un ciclo, puoi mettere all'interno del ciclo le seguenti espressioni:
Application.DoEvents() Me.Refresh()
Meglio se queste espressioni le metti sulla form "di attesa".
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

the_angel Profilo | Newbie

Ciao,

innanzi tutto grazie della risposta...

si effettivamente ci avevo pensato...

però esiste una soluzione più semplice/rapida?

grazie ancora!
Angelo

the_angel Profilo | Newbie

Perfetto,

grazie mille! mentre scrivevi avevo risposto, alla risposta precedende...

dovrebbe andare benissimo per il mio scopo!


Angelo

the_angel Profilo | Newbie

Ho provato!!

funziona alla grande, esattamente come volevo!

Per ora va bene, quando avro più tempo sicuramente farò il processo separato!

Grazie mille a tutti ragazzi!

accetto la risposta, anche se vorrei accettarle entrambe!


Angelo

0v3rCl0ck Profilo | Guru

>Soluzione elegante: puoi usare i Thread...
>
>Soluzione poco elegante (anzi peggio, ma funziona): siccome ipotizzo
>che ci sia un ciclo, puoi mettere all'interno del ciclo le seguenti
>espressioni:
>Application.DoEvents()
>Me.Refresh()

Come soluzione rapida, può andare, anche se la sconsiglio da quando si possono usare i thread.

Comunque al codice sopra citato, suggerisco di aggiungere anche questa linea, per fargli fare almeno una piccola attesa prima di fare di nuovo un DoEvents:

System.Threading.Thread.CurrentThread.Sleep(100)


-------------------------------------------------------------------
Michael Denny
Senior Software Developer - Microsoft Framework (C# ASP.NET VB.NET)
http://blogs.dotnethell.it/Regulator/

the_angel Profilo | Newbie

Si, il thread sarebbe molto molto meglio...
credo che sarà oggetto della prossima "release", specie perchè al cliente non importa come è fatto, ma che funzioni e nei tempi stabiliti...

Stasera (ma dubito di riuscire) o al max domani sera aggiungo quella riga, poi vi faccio sapere come va

Grazie mille ancora per la disponibilità!


Angelo

0v3rCl0ck Profilo | Guru

>Si, il thread sarebbe molto molto meglio...
>credo che sarà oggetto della prossima "release", specie perchè
>al cliente non importa come è fatto, ma che funzioni e nei tempi
>stabiliti...
>
>Stasera (ma dubito di riuscire) o al max domani sera aggiungo
>quella riga, poi vi faccio sapere come va

Perfetto, a sta sera

>
>Grazie mille ancora per la disponibilità!
>

Di niente


-------------------------------------------------------------------
Michael Denny
Senior Software Developer - Microsoft Framework (C# ASP.NET VB.NET)
http://blogs.dotnethell.it/Regulator/

the_angel Profilo | Newbie

Ciao!

Scusa il ritardo...
ho aggiunto la riga...sarà che non sono molto esperto, ma non noto molta differenze!

boh....

comunque gira troppo bene rispetto a prima!


Angelo
Angelo

0v3rCl0ck Profilo | Guru

>Ciao!
>
>Scusa il ritardo...
>ho aggiunto la riga...sarà che non sono molto esperto, ma non
>noto molta differenze!

Forse sembra uguale, ma in realtà così il processore non si impicca solo per lanciare a bomba il DoEvents e ridisegnare la form.


-------------------------------------------------------------------
Michael Denny
Senior Software Developer
Microsoft Framework (C# ASP.NET VB.NET)
http://blogs.dotnethell.it/Regulator/

the_angel Profilo | Newbie

Perfetto!

Allora lo lascio....grazie ancora!

Davvero molto molto gentili!
Angelo
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