System.Timers.Timer | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar System.Timers.Timer

.Net Framework’te Timer Class’ları Arasındaki Farklar

12 December 2009 3 yorum

BilgeAdam’da öğrencilerime WinForms anlatırken, kafalarının çok karıştığı konulardan biri de Timer nesnesidir.

Daha doğrusu Timer nesneleridir demeliyim. Çünkü .Net Framework’te Timer ismine sahip tam 3 tane class var;

  • System.Timers.Timer
  • System.Threading.Timer
  • System.Windows.Forms.Timer

System.Timers.Timer

Özellikle Multi-Threaded uygulamalarda tercih edilir. Thread-safe olduğu için, birden çok thread’den erişilebilir.

System.Timers.Timer t = new System.Timers.Timer(5000);
t.Elapsed += delegate(object _s, System.Timers.ElapsedEventArgs _e)
{
	MessageBox.Show("5 saniye geçti!..");
	t.Stop();
};
t.Start();

System.Threading.Timer

TimerCallBack delegate kullanarak, atanmış metodu çalıştırabilir. Metod, framework tarafından oluşturulan başka bir thread’de çalışır.

Timer nesnesi oluşturulduğu anda, çalışmaya başlar ve scope’tan çıkana kadar da çalışır. Durdurmak veya Başlatmak mümkün değildir.

Aşağıdaki örnekte 2.parametre (null), Callback method’a aktarılacak parametreyi gösterir.

3.parametre (1000), Timer nesnesi başlatılmadan önce beklenecek süreyi gösterir.

System.Threading.Timer t = new System.Threading.Timer(new System.Threading.TimerCallback(TimerTest), null, 1000, 5000);
private void TimerTest(object state)
{
	MessageBox.Show("5 saniye geçti!..");
}

System.Windows.Forms.Timer

Toolbox’ta gördüğümüz nesnedir. Windows Form ile aynı thread’de ve senkron olarak çalışır, böylece hiçbir UI operasyonunu bölmez.

System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
t.Interval = 5000;
t.Start();
t.Tick += delegate(object _s, EventArgs _e)
{
	MessageBox.Show("5 saniye geçti!..");
	t.Stop();
};

Daha ayrıntılı bilgi için MSDN’deki şu makaleyi okuyabilirsiniz.