Timer Sınıfı (Timer Class)

Eyl 06, 2013

"System.Timers" isim uzayı (namespace) altındaki Timer Sınıfı (Timer Class) , bir programda düzenli aralıklarla yapılması gereken işlerin zamanlanarak yapılmasını sağlar. Bu sınıf sayesinde bir metot belli bir zaman dilimi içerisinde birçok kez çağrılabilir. Rutin olarak yapılmak istenen kontroller için "Timer" kullanmak oldukça kullanışlıdır. “Timer” sayesinde bir servis yaratılarak sunucu kontrolleri yapılabilir ve sistemin ayakta (up) ve çalışıyor durumda olup olmadığı incelenebilir. "Timer" nesnelerinin işlenebilmesi için aktifleştirilmeleri gerekmektedir. Bunu gerçekleştirmek için "Timer" sınıfının Start() metodu kullanılarak zamanlayıcı başlatılır. “Timer” sınıfında bulunan bulunan Elapsed olayı (event) “Timer” nesnesinin Interval (Aralık) özelliği ile belirlenen aralıkta çalıştırılacak metodun referansını tutar. "Timer" olayları ancak Timer.Start() metodu çağırıldığında tetiklenirler. "Interval" özelliği bir “Timer” nesnesi birden çok olaya atandığında, olaylar arasında geçecek süreyi belirler. "Timer", Timer.Stop() metodu çağırılarak durdurulur.

“Timer” sınıfı iki adet constructor (yapıcı) metoda sahiptir. Bunlar:

  • Timer() :  “Timer” sınıfından bir nesne oluşturarak sınıfın tüm özelliklerinin başlangıç değerlerini atar.
  • Timer(double) : : Parametre olarak "double"  tipinden bir değer alan bu metot, milisaniyeler cinsinden “interval” (aralık) belirlemeye yarar. Milisaniye cinsinden olan bu parametre "Timer" nesnesinin "Elapsed" olayının ne kadar süre aralıkla meydana geleceğini belirler.
Parametre olarak "double" tipinden bir değer alan bu metot, milisaniyeler cinsinden “interval” belirlemeye yarar. Milisaniye cinsinden olan bu parametre "Timer" nesnesinin "Elapsed" olayının ne kadar süre aralıkla meydana geleceğini belirler

Uygulama

"Timer" sınıfı kullanımına örnek bir uygulama aşağıdadır. Bu uygulamada parametresi 1000 milisaniye olan Timer() yapıcı metodu çağırılmış ve böylece "Elapsed" olayının saniyede bir tetiklenmesi sağlanmıştır. “Timer” olayı Start() metodu ile tetiklenmiş ve sonsuz bir while döngüsü ile programın belli bir süre çalışması ve hemen sonlanmaması sağlanmıştır. Bu sayede saniyelik değişimler gözlemlenmektedir. Olay içerisinde 6 saniye boyunca “Timer” çalıştırılmış, 7. saniyede “Timer” sınıfının Stop() metodu kullanılarak “Timer” durdurulmuştur.  DateTime tipi kullanılarak zaman bilgisi elde edildiği gibi ElapsedEventArgs sınıfının "SignalTime" özelliği (property) kullanılarak da aynı bilgiye ulaşılmıştır. Uygulamanın kodları aşağıdadır:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;

namespace TimerSınıfı
{
    class Program
    {

        static Timer zamanlayici;
        static int counter = 0;

        static void Main(string[] args)
        {
            zamanlayici = new Timer(1000);
            zamanlayici.Elapsed += Tick;
            zamanlayici.Start();

            while (true) ;      
        }

        static void Tick(object sender, ElapsedEventArgs e)
        {
                Console.WriteLine("Tik-tak! " + DateTime.Now.ToLongTimeString());              

                if (counter == 6)
                {
                    Console.WriteLine("Timer durduruluyor... ");
                    Console.WriteLine("Timer durdu!          " + e.SignalTime);

                    zamanlayici.Stop();
                }

                else

                    counter++;
          }
     }
}

Uygulamanın ekran çıktısı şu şekilde olmaktadır: