L'Informatica Piemunteisa - home page L'Informatica Piemunteisa



Trucchi

titolo: Visual Studio - refresh

data: 10/05/2010

           Recentemente ho sviluppato una applicazione in Visual Studio, linguaggio C#, ed ho avuto parecchi problemi a gestire correttamente il refresh a video di alcune etichette contenenti dei contatori.
In linea di massima si tratta di due indicatori: in uno viene visualizzato il numero di record corrente (1, 2, 3, 4, ... n) su cui stà lavorando l'applicazione; ogni volta, prima di passare da un record al successivo, l'applicazione attende 10 secondi, durante i quali nel secondo indicatore si vede man mano il tempo residuo a disposizione (10 secondi, 9, 8, 7, ... 0).
Tutto apparentemente banale, col piccolo particolare che il refresh a video dei numeri nei due indicatori funzionava bene solo per valori bassissimi, mentre per i normali valori di cui avevo bisogno, dopo pochi giri il valore degli indicatori rimaneva fisso ed invariato. Premesso che ho realizzato il 'count-down' del secondo indicatore semplicemente eseguendo un ciclo contenente:
System.Threadind.Thread.Sleep(1000) (ciclo di attesa di 1 secondo)
seguito dal -1 nella variabile di conteggio e dalla impostazione del nuovo valore nella etichetta, ho girato in lungo ed in largo tutti i forum del mondo trovando ovunque tanti consigli su come effettuare il Refresh, del singolo campo da visualizzare o dell'intera Form, ma senza ottenere risultati soddisfacenti.
Alla fine sono riuscito a capire che i cicli di sleep, in realtà, usano interamente le risorse del processore, tanto che è necessario un apposito comando, proprio per rilasciare le risorse, permettendo al processore anche la gestione di tutto il resto, come il refresh. Tutto ciò si ottiene semplicemente mettendo subito dopo lo Sleep il comando:
My.Application.DoEvents()
in questo modo funziona tutto perfettamente!!!

Indietro


Informativa - Contatti - Favoriti

L'Informatica Piemunteisa © 2002-2018 by Franco C.