I timer sono oggetti che permettono l'esecuzione ripetuta di operazioni, con cadenza regolare e continua. Possiamo eseguire un timer per aggiornare, ad esempio, un contatore che informi l'utente della durata della sua sessione oppure attivare e disattivare alcuni elementi dell'interfaccia in modo temporizzato.
I timer sono strumenti di base per molti linguaggi e anche WinRT ne è fornito grazie alla classe ThreadPoolTimer e al metodo CreatePeriodicTimer.
Il metodo accetta i parametri per impostare la frequenza di esecuzione, l'handler che scatta all'arrivo della frequenza e l'handler che viene eseguito se il timer viene annullato.
int i = 0;
TimeSpan period = TimeSpan.FromSeconds(1);
var elapsedHandler = new TimerElapsedHandler((source) => {
i++;
Dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
() => {
tb1.Text = Convert.ToString(i);
});
});
var destroyedHandler = new TimerDestroyedHandler((source) => {
i = 0;
Dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
() => {
tb1.Text = Convert.ToString(i);
});
});
ThreadPoolTimer timer = ThreadPoolTimer.CreatePeriodicTimer(elapsedHandler, period, destroyedHandler);Il periodo viene impostato con un TimeSpan e lo start avviene direttamente all'istanza del ThreadPoolTimer.
Come possiamo vedere nell'esempio, il codice che viene eseguito nell'handler su un thread diverso rispetto al thread dell'interfaccia, quindi se vogliamo riportare una informazione sui controlli dobbiamo usare il Dispatcher.
Oltre a CreatePeriodicTimer abbiamo a disposizione anche il metodo CreateTimer, che esegue una sola volta l'handler e non si ripete.
Il timer può essere interrotto invocando il metodo timer.Cancel();.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire gli errori nelle Promise JavaScript con try()
Migrare applicazioni legacy nel cloud con Azure App Service Managed Instance
Impostare la content-visibility in CSS per ottimizare il rendering iniziale di una pagina
Raggruppamento degli aggiornamenti di dipendenze tra directory in un monorepo con Dependabot
Abilitare il rolling update su Azure Functions flex consumption
Realizzare un accordion con gli elementi HTML details e summary
Effettuare chiamate API tramite GitHub App
Utilizzare AbortController per cancellare operazioni asincrone in JavaScript
Evitare la compressione degli artefatti in un workflow di GitHub
Gestione dei prompt file a livello di organizzazione aziendale in GitHub
Eseguire una ExecuteUpdateAsync senza usare un'expression con Entity Framework
Utilizzo di CSS Scroll Snap per realizzare un carousel
I più letti di oggi
- Leggere i parametri da riga di comando in una file based app .NET
- Building Custom Developer Agents
- Build 2015: segui con noi tutte le novità per gli sviluppatori in diretta da San Francisco
- Build 2014: tutte le novità per gli sviluppatori in diretta da San Francisco
- Build 2016: segui con noi in live streaming!


