Invest in people before investing in tools

Il blog di Matteo Baglini
posts - 118, comments - 95, trackbacks - 697

DispatcherTimer, Yet Another Timer Class

Chiunque lavori da diverso tempo con il .NET Framework saprà che esistono diverse implementazioni della classeTimer, le quali sono:

Per maggiori informazioni leggete questo articolo di MSDN Magazine: http://msdn.microsoft.com/en-us/magazine/cc164015.aspx.

Con l'arrivo di WPF è stata introdotta un'altra classe Timer: System.Windows.Threading.DispatcherTimer.

Come ogni Timer che si rispetti la classe non fa altro che eseguire un operazione (metodo) allo scadere di un intervallo di tempo. Quindi la domanda che viene subito in mente è: perchè introdurre un'altra classe Timer?? Seplice, questa implementazione utilizza l'oggetto System.Windows.Threading.Dispatcher (anche questo introdotto nel .NET Framework con WPF) il quale permette di gestire una coda di operazioni (con priorità) per un singolo thread, molto utile quando dobbiamo accedere da un thread secondario a quello che gestisce l'interfaccia utente.

Come si può notare dal seguente snippet l'utilizzo di DispatcherTimer è molto semplice:

   1: DispatcherTimer timer = new DispatcherTimer();
   2: timer.Interval = TimeSpan.FromSeconds(5);
   3: timer.Tick += new EventHandler((sender, e) => { /* do something */ });
   4: timer.Start();

Usando il costruttore di default viene utilizzato il Dispatcher di default e la priorità Normal, per controllare queste due proprietà basta usare uno dei vari overlaod disponibili:

   1: ...
   2: public DispatcherTimer(DispatcherPriority priority);
   3: public DispatcherTimer(DispatcherPriority priority, Dispatcher dispatcher);
   4: ...

Print | posted on venerdì 23 maggio 2008 15:01 | Filed Under [ .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET