In .NET putem sa alegem din 3 tipuri de timer:
System.Thread.Timer, care rulează un nou thread pentru operațiile sale. Acesta este folositor când vrem sa facem operații asyncron.
timer.Change(Timeout.Infinite, Timeout.Infinite); //Disable.
timer.Change(0, 2000); //Enable.
Cea ce mi s-a parut foarte folositor la acest imer sunt parametrii lui Change si ultimii doi parametrii a contructorului. Prin intermediul lor putem sa specificam dupa ce perioada sa se apeleze metoda ExecutaCeva, iar apoi la ce interval de timp aceasta sa fie executa.
Sunt cazuri cand vrem ca primul apel ExecutaCeva sa fie facut dupa 1 secunda, iar apoi timer-ul sa apeleze aceasta metoda la 10 secunte. Pentru acest lucru daac am folostii System.Timer ar fi nevoie sa oprim timer-ul dupa prima executie, sa setam din nou intervalul de timp, iar apoi sa îl pornim din nou.
Cand al doilea parametru este 0 sau Timer.Infine, atuci timer-ul se executa o singura data.
- System.Timer - thread timer;
- System.Thread.Timer - server base timer;
- System.Windows.Forms.Timer - windows base timer;
System.Thread.Timer, care rulează un nou thread pentru operațiile sale. Acesta este folositor când vrem sa facem operații asyncron.
System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(ExecutaCeva), null, 0, 2000);
...
private void ExecutaCeva(object obj)
{
....
}
Pentru a face disable/enable putem sa folosim:timer.Change(Timeout.Infinite, Timeout.Infinite); //Disable.
timer.Change(0, 2000); //Enable.
Cea ce mi s-a parut foarte folositor la acest imer sunt parametrii lui Change si ultimii doi parametrii a contructorului. Prin intermediul lor putem sa specificam dupa ce perioada sa se apeleze metoda ExecutaCeva, iar apoi la ce interval de timp aceasta sa fie executa.
Sunt cazuri cand vrem ca primul apel ExecutaCeva sa fie facut dupa 1 secunda, iar apoi timer-ul sa apeleze aceasta metoda la 10 secunte. Pentru acest lucru daac am folostii System.Timer ar fi nevoie sa oprim timer-ul dupa prima executie, sa setam din nou intervalul de timp, iar apoi sa îl pornim din nou.
System.Thread.Timer ne permite sa facem in felul urmator:
System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(ExecutaCeva), null, 1000,10000);
varianta care o prefer eu este:System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(ExecutaCeva), null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(10));
Este bine de stiut ca orice moment cand apelam metoda Change, timpul pana cand se apeleaza ExecutaCeva se modifica. Daca prima valoare este 0, atunci metoda pentru callback se apeleaza imediat, iar daca este Timer.Infinite atunci timer-ul este disable.Cand al doilea parametru este 0 sau Timer.Infine, atuci timer-ul se executa o singura data.