Oppure

Loading
06/08/09 12:24
Molin Mauro
Ciao a tutti!
Vi espongo il mio problema:
Ho una label di "stato" e vorrei che l'utente fosse informato di ciò che avviene. Però se scrivo tutto su un'unico Sub ovviamente visualizza solo lo stato finale ("Operazione Completata";). La mia domanda è: c'è un modo per far "dormire" il codice però in modo asincrono? Questo risolverebbe il problema mettendolo dopo ogni cambiamento di testo della label?

Pensavo cira così:
'codice stato 1
Label1.Text = "STATO 1"
'codice x lo sleep del codice in asincrono
'codice stato 2
Label1.Text = "STATO 2"


e via dicendo...
Ultima modifica effettuata da Molin Mauro 06/08/09 12:26
aaa
06/08/09 12:29
ruggy94
Non è che io abbia capito benissimo, ma per quello che ho compreso, sbagli l'impostazione. Per variare la label insieme allo stato delle operazioni, non devi utilizzare nessuna pausa. Il cambio deve avvenire nel momento in cui inizia un'operazione. Ammettiamo che il seguente codice che posto appartenga ad un programma che prima scrive un file e poi lo cancella (non ha molto senso :D ma è per fare un esempio):
lblStato.text="Sto creando il file"
CreaFile()
lblStato.text="Sto cancellando il file"
CancellaFile()


Inoltre il metodo che avevi scelto non è affidabile, perchè la stessa operazione può richiedere tempi d'esecuzione diversi.

Se qualcosa non ti è chiaro, chiedi pure.
Ultima modifica effettuata da ruggy94 06/08/09 12:31
aaa
06/08/09 12:32
Molin Mauro
Postato originariamente da ruggy94:

Non è che io abbia capito benissimo, ma per quello che ho compreso, sbagli l'impostazione. Per variare la label insieme allo stato delle operazioni, non devi utilizzare nessuna pausa. Il cambio deve avvenire nel momento in cui inizia un'operazione. Ammettiamo che il seguente codice che posto appartenga ad un programma che prima scrive un file e poi lo cancella (non ha molto senso :D ma è per fare un esempio):
lblStato.text="Sto creando il file"
CreaFile()
lblStato.text="Sto cancellando il file"
CancellaFile()


Inoltre il metodo che avevi scelto non è affidabile, perchè la stessa operazione può richiedere tempi d'esecuzione diversi.

Se qualcosa non ti è chiaro, chiedi pure.

Il problema è che così come dici tu se io devo fare per esempio 5 operazioni visualizzerebbe sulla label solo l'ultima operazione perche le operazioni che devo eseguire non sono asincrone.
aaa
06/08/09 12:38
manvb.net
Non ci vedo nessun problema, se le operazioni sono eseguite velocemente ben venga, perchè devi rallentare la label? Non mi pare una buona strategia rallentare un operazione solo per far vedere all'utente che essa è stata eseguita. Quindi va benissimo il codice che stai usando adesso.
aaa
06/08/09 12:41
Molin Mauro
Postato originariamente da manvb.net:

Non ci vedo nessun problema, se le operazioni sono eseguite velocemente ben venga, perchè devi rallentare la label? Non mi pare una buona strategia rallentare un operazione solo per far vedere all'utente che essa è stata eseguita. Quindi va benissimo il codice che stai usando adesso.


ma io non pensavo di rallentarlo di tanto... magari 10ms giusto per dare il tempo alla label di aggiornarsi e poi cmq siccome alcune operazioni sono abbastanza lunghe (come lo scaricamento di un file da circa 20MB) non credo che 10ms all'utente gli cambino la vita!
Ultima modifica effettuata da Molin Mauro 06/08/09 12:42
aaa
06/08/09 12:44
ruggy94
A me sembra comunque una scelta sbagliata, poi decidi tu, ma non vedo il motivo.
E poi (non vorrei cadere in errore e quindi dire stupidaggini) le operazioni Sincrone (come quelle che stai svolgendo tu) non sono eseguite una dopo l'altra? Quindi i processi non si "sovrappongono", e perciò dovesti vedere tutti gli stati, e non solo l'ultimo. Correggetemi se sbaglio :-|
Ultima modifica effettuata da ruggy94 06/08/09 12:46
aaa
06/08/09 12:45
manvb.net
Cosa significa "per dare il tempo alla label di aggiornarsi"? La label si aggiorna ogni volta che un operazione viene completata e con 10 ms l'occhio umano non la percepisce comunque.
Ultima modifica effettuata da manvb.net 06/08/09 12:45
aaa
06/08/09 12:49
Molin Mauro
Postato originariamente da manvb.net:

Cosa significa "per dare il tempo alla label di aggiornarsi"? La label si aggiorna ogni volta che un operazione viene completata e con 10 ms l'occhio umano non la percepisce comunque.


forse nn mi sono spiegato bene...
pensavo tipo così.
Private Sub Operazioni()
Operazione1()
Label1.Text = "OPERAZIONE 1 Completa"
'il codice dorme x 10ms in modo asincrono
'la label si aggiorna da sola
Operazione2() 
Label1.Text = "OPERAZIONE 2 Completa"
'il codice dorme x 10ms in modo asincrono
'la label si aggiorna da sola
End Sub


e via dicendo...
il problema è che se il codice non dormisse x 10ms in modo asincrono allora la label non verrebbe cambiata di testo mentre il Sub "Operazioni" è in esecuzione ma solo quando esso è completato quindi non verrebbero visualizzati i vari passaggi nella label!
aaa