Finestra di attesa durante operazioni lunghe

giovedì 28 giugno 2007 - 16.46

GuardianOfTheFlame Profilo | Junior Member

Riciao,
voglio mostrare una finestra di caricamento (la classica "attendere prego" con la progress che gira, come al caricamento della guida di VS x intenderci) disabilitando la form che carica i dati, ma non capisco come fare .
Mi spiego, nella load del form che carica i dati dal db (l'operazione lunga) ho questo codice:
try
Dim Wait As New frmWaiting
Me.Enabled = False
Wait.Show()
'operazione lunga....
catch ex as exception
Finally
Me.Enabled = True
Wait.Close()
end try

il problema è che la finestra Wait non si disegna correttamente (rimane bianca come quando l'applicazione non risponde). Anche se faccio un refresh subito dopo show.
Ho anche provato ad aprire Wait con ShowDialog, ma non va bene xché il codice di chi chiama non va avanti finche nn chiudo la finestra di dialogo.
Come devo fare???
Spero riuscite a darmi una mano che ci sto sbattendo la testa da un po'

Grazie!
Salo

P.S.: spero di nn averlo inviato 2 volte... sembrava nn riuscire a inviare il mex...

trinity Profilo | Guru

>Riciao,
>voglio mostrare una finestra di caricamento (la classica "attendere
>prego" con la progress che gira, come al caricamento della guida
>di VS x intenderci) disabilitando la form che carica i dati,
>ma non capisco come fare .
>Mi spiego, nella load del form che carica i dati dal db (l'operazione
>lunga) ho questo codice:
>try
> Dim Wait As New frmWaiting
> Me.Enabled = False
> Wait.Show()

metti una cosa del genere

My.Application.DoEvents

in pratica ti permette di eseguire interamente tutto il codice che avviene prima e passa al codice successivo solo quando è terminata la prima parte

> 'operazione lunga....
>catch ex as exception
>Finally
> Me.Enabled = True
> Wait.Close()
>end try
>
>il problema è che la finestra Wait non si disegna correttamente
>(rimane bianca come quando l'applicazione non risponde). Anche
>se faccio un refresh subito dopo show.
>Ho anche provato ad aprire Wait con ShowDialog, ma non va bene
>xché il codice di chi chiama non va avanti finche nn chiudo la
>finestra di dialogo.
>Come devo fare???
>Spero riuscite a darmi una mano che ci sto sbattendo la testa
>da un po'
>
>Grazie!
>Salo
>
>P.S.: spero di nn averlo inviato 2 volte... sembrava nn riuscire
>a inviare il mex...

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

GuardianOfTheFlame Profilo | Junior Member

Ciao!
Mi sa che DoEvents risolverebbe effettivamente il mio problema, solo che nn è usabile senza abilitare Application Framework (la spunta nelle proprietà del progetto) e io ho bisogno di far partire il tutto da una sub Main
O esiste un modo per abilitare l'application framework e far partire il mio progetto dalla classe Starter contenente la Shared Main (o cmq di usare DoEvents in qualche modo!!!)?

Salo

Teech Profilo | Expert

2 soluzioni forse stupide ma che a logica potrebbero funzionare:

1. Metti "l'elaborazione lunga" nella frmWaiting.
2. Usi un Panel all'interno della Main che visializzi/nascondi a piacere contenente i controlli che vuoi come nella frmWaiting...

Forse non sono il massimo dell'eleganza però...

Ciao!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

GuardianOfTheFlame Profilo | Junior Member

Grazie a tutti,
sono poi riuscito a risolvere nn proprio in modo elegante ma era un problema da risolvere al volo... cmq anche se My.Application.DoEvents() non funziona (l'Intellisense non riesce a risolvere e mi da errore in compilazione), ho scoperto che posso scrivere semplicemente Application.DoEvents()
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