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
Generare token per autenicarsi sulle API di GitHub
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Implementare l'infinite scroll con QuickGrid in Blazor Server
Migliorare la sicurezza dei prompt con Azure AI Studio
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Creare alias per tipi generici e tuple in C#
Implementare il throttling in ASP.NET Core
Filtrare i dati di una QuickGrid in Blazor con una drop down list