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
Utilizzare ExecuteUpdate per aggiornare colonne JSON in Entity Framework
Utilizzare i command service nei test con .NET Aspire
Usare i generics di C# con la clausola nameof in modo semplificato
Mappare una complex property di una entity su un campo JSON
Personalizzare le pagine di errore su Azure App Service
Creare un file Zip partendo da uno stream sfruttando le classi del namespace System.IO.Compression
Welcome to Future Dev Day 2026
Estrarre solo alcuni file da uno zip tramite le classi del namespace System.IO.Compression
Enterprise Live Migrations - Migrare da Azure DevOps a GitHub
Utilizzare zizmor per rendere più sicuri i workflow di GitHub
Integrare un LLM in ASP.NET Core con Microsoft.Extensions.AI
Escludere alcuni file da GitHub Copilot
I più letti di oggi
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
- Accedere a dati esposti con WebService con Silverlight 1.0
- Utilizzare dati in formato XML in XAML


