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
Creare un controllo Expander in un'app Xamarin Forms
Creare un radio button per Blazor
Centralizzare la gestione delle entity multitenant in Entity Framework Core
Realizzare un effetto gradiente tramite composition API nella Universal Windows Platform
Modificare il layout della paginazione del controllo CarouselView in Xamarin Forms
Ecco .NET 5: l'alba di una nuova era per lo sviluppatore .NET
Caricare le immagini di una pagina in lazy loading con Angular
Progressive Web Apps with Blazor and Azure
Condividere una variabile tra stage in una pipeline YAML di Azure DevOps
Creare un effetto di ombra sui controlli della Universal Windows Platform
UI testing in applicazioni .NET desktop e mobile
Introduzione a GitHub
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Creare un record in C#
- Winget: un nuovo package manager per Windows
- il 18/02 c'è il #container & #devops day! https://aspit.co/ContainerDevOpsDay-21 Le iscrizioni sono sempre aperte e la Call For Paper è attiva fino al 28/01! #aspilive #cfp
- Attesa e validazione manuale nelle pipeline YAML di Azure DevOps
- Utilizzare il CSS Grid Model per creare il layout di un sito
- Montare una file share con Azure Container Instance
- Container & DevOps Day - Online