2 pagine in totale: <<Indietro 1 [2]
La proprietà AutoReset indica che una volta passato il tempo da noi indicato, il timer non deve azzerarsi e ricominciare automaticamente da solo.
Dichiariamo inoltre il gestore dell'evento Elapsed che avrà l'incarico di eseguire le nostre operazioni giornaliere e di far ripartire il timer.
Con la proprietà Enabled, infine, indichiamo al timer di partire.
Trascorsi i millisecondi da noi indicati la subroutine OnTimedEvent verrà richiamata. Vediamone l'implementazione:
public void OnTimedEvent(object source, ElapsedEventArgse)
{
//operazioni varie da eseguire
//iterazione con database ecc.
When=When.AddHours(Every);
//riprendo l'intervallo così prendo in considerazione il tempo di elaborazione passato
//con il tempo - potrebbe sballare
OpTimer.Interval=GetInterval();
OpTimer.Start();
} La firma della subroutine è d'obbligo con i due parametri sopra riportati.
Dobbiamo per prima cosa eseguire nostre operazioni di routine e alla variabile When che contiene l'ora del prossimo avvio aggiungeremo il numero di ore da noi prefissato (possono essere minuti o secondi, basta cambiare il metodo Addxxx), nel nostro caso 24 ore, per eseguire l'operazione una volta al giorno.
Riassegnamo quindi il nuovo intervallo al nostro timer tramite la proprietà Interval e riavviamo il conteggio dei millisecondi con il metodo Start.
La funzione GetInterval()
Vediamo il cuore del funzionamento del nostro timer.
Questa funzione è molto importante perché si occupa di calcolare l'intervallo necessario tra una ripetizione e l'altra:
private double GetInterval()
{
TimeSpan diff=When.Subtract(DateTime.Now);
//risultato in millisecondi
return diff.Ticks / 10000;
} La funzione sottrae all'ora in cui deve eseguire le operazioni (variabile When) l'ora attuale e ne restituisce i millisecondi che devono trascorrere dal momento attuale fino alla prossima esecuzione (10000 Ticks è uguale ad un millisecondo).
La funzione può sembrare banale perché teoricamente basterebbe calcolare l'intervallo aggiungendo semplicemente il numero dei millisecondi ottenuti moltiplicando Every per 60 (minuti) per 60 (secondi) e infine per 1000.
Questo invece non va bene perché le operazioni di routine che dobbiamo far eseguire richiedono del tempo e l'orario di esecuzione potrebbe non essere corretto.
Se per esempio vogliamo far eseguire le operazioni alle 8:00 del mattino ogni 24 ore con il passare del tempo le future operazioni potrebbero eseguirsi alle 8:01, 8:02 e così via a causa del tempo di esecuzione necessario alla routine stessa per terminare correttamente.
Con la nostra funzione calcoliamo l'intervallo rimanente in modo preciso e dunque evitiamo problemi.
Per finire...
A questo punto dobbiamo ricompilare la classe nello stesso modo di quella di base, ovviamente assicurandoci che l'assembly risultante si trovi nella directory \bin\ dell'application.
In questo modo verranno eseguite automaticamente le nostre operazioni.
Conclusioni
Il nostro timer web è pronto. Attenzione ad usare intervalli piccoli: potreste creare cicli infiniti e mandare in crash il sistema.
Alcune considerazioni: questo è uno spunto, non un'applicazione completa. Nulla vieta di usare più timer per operazioni diverse e comunque questa è una buona occasione per imparare l'uso dell'oggetto timer (utile soprattutto per applicazioni desktop), oltre che l'uso della classe HttpApplication, che potrebbe dar vita a nuove utili funzioni e risparmiare un po' di carico al vostro server. Potrete eseguire determinate operazioni di routine, come generazioni di top ten o calcoli complicati, solamente una volta (o più) al giorno.
2 pagine in totale: <<Indietro 1 [2]
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà

Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!