Merhaba değerli Webkolog.net takipçileri, bugünkü yazımızda C# .NET Framework 4 ile Windows Forms uygulamalarımızda belirli aralıklarla kod çalıştırmamızı sağlayan Timer
kontrolünü yakından inceleyeceğiz. Zamanlayıcılar, uygulamalarımızda zaman bazlı olayları yönetmek, periyodik güncellemeler yapmak veya belirli bir süre sonra bir eylemi tetiklemek için vazgeçilmez araçlardır. Gelin, Timer
'ın temel özelliklerini, nasıl kullanıldığını ve dikkat etmemiz gereken noktaları birlikte keşfedelim.
Timer
Kontrolü Nedir?
Timer
, .NET Framework'te belirli bir zaman aralığı dolduğunda bir olayı (Tick
olayı) tetikleyen bir bileşendir. Windows Forms uygulamalarında kullandığımız System.Windows.Forms.Timer
sınıfı, görsel bir arayüze sahip değildir; daha çok arka planda çalışan ve UI thread'i üzerinde olayları tetikleyen bir bileşendir. Bu özelliği sayesinde, kullanıcı arayüzünü güncelleyen veya kısa süreli periyodik görevleri yerine getiren senaryolarda oldukça kullanışlıdır.
Önemli Not: .NET Framework'te farklı amaçlar için tasarlanmış başka Timer
sınıfları da bulunmaktadır (örneğin, System.Timers.Timer
ve System.Threading.Timer
). Bu makalede, özellikle Windows Forms uygulamaları için tasarlanmış ve UI thread'i üzerinde çalışan System.Windows.Forms.Timer
sınıfına odaklanacağız.
Timer
Kontrolünün Temel Özellikleri ve Olayları
Timer
bileşeni, zamanlama davranışını kontrol etmek için basit ama etkili özelliklere sahiptir:
Interval
: ZamanlayıcınınTick
olayını tetikleyeceği milisaniye cinsinden süreyi belirler. Örneğin,1000
milisaniye (1 saniye) olarak ayarlandığında,Tick
olayı her saniye tetiklenir.Enabled
: Zamanlayıcının etkin olup olmadığını belirler. Eğertrue
olarak ayarlanırsa zamanlayıcı başlar,false
ise durur. Bu özelliği tasarımcıda veya kod içinde ayarlayabilirsiniz.Tick
:Interval
süresi her dolduğunda tetiklenen olaydır. Zamanlayıcının periyodik olarak yapmasını istediğimiz tüm kodlar bu olay işleyicisinin içine yazılır.
Timer
Kullanım Senaryoları
1. Basit Bir Sayaç Oluşturma
Bu örnekte, bir Label
kontrolünde her saniye artan bir sayaç görüntüleyeceğiz.
using System;
using System.Windows.Forms; // Timer, Label için
public partial class Form1 : Form
{
private Timer timer1; // Tasarımcıda eklenen Timer bileşeni
private Label labelSayac; // Tasarımcıda eklenen Label bileşeni
private int sayacDegeri = 0;
public Form1()
{
InitializeComponent();
// Tasarımcıda timer1 ve labelSayac'ın eklenmiş olduğunu varsayalım.
// labelSayac'ın Text özelliğini başlangıçta "0" olarak ayarlayalım.
// Timer'ın Interval özelliğini 1 saniye (1000 milisaniye) olarak ayarla
this.timer1.Interval = 1000;
// Timer'ın Tick olayını bağla
this.timer1.Tick += new EventHandler(timer1_Tick);
}
// Form yüklendiğinde zamanlayıcıyı başlat
private void Form1_Load(object sender, EventArgs e)
{
this.timer1.Start(); // Zamanlayıcıyı etkinleştir
}
// Timer'ın Tick olayı işleyicisi
private void timer1_Tick(object sender, EventArgs e)
{
sayacDegeri++; // Sayacı bir artır
this.labelSayac.Text = sayacDegeri.ToString(); // Label'ı güncelle
}
}
2. Zamanlayıcıyı Başlatma ve Durdurma
Bir buton tıklamasıyla zamanlayıcıyı başlatıp durdurabiliriz.
using System;
using System.Windows.Forms;
public partial class Form1 : Form
{
private Timer timer1;
private Label labelDurum; // Durumu gösterecek Label
private Button buttonBaslat; // Başlat butonu
private Button buttonDurdur; // Durdur butonu
public Form1()
{
InitializeComponent();
timer1 = new Timer(); // Kod ile de oluşturulabilir
timer1.Interval = 500; // Yarım saniye
timer1.Tick += new EventHandler(timer1_Tick);
// Tasarımcıda labelDurum, buttonBaslat, buttonDurdur eklenmiş olsun
this.labelDurum.Text = "Zamanlayıcı Durdu";
this.buttonBaslat.Text = "Başlat";
this.buttonDurdur.Text = "Durdur";
this.buttonBaslat.Click += new EventHandler(buttonBaslat_Click);
this.buttonDurdur.Click += new EventHandler(buttonDurdur_Click);
}
private void timer1_Tick(object sender, EventArgs e)
{
// Her yarım saniyede bir mesajı güncelle
this.labelDurum.Text = "Zamanlayıcı Çalışıyor: " + DateTime.Now.ToLongTimeString();
}
private void buttonBaslat_Click(object sender, EventArgs e)
{
if (!this.timer1.Enabled) // Eğer zamanlayıcı duruyorsa
{
this.timer1.Start(); // Zamanlayıcıyı başlat
this.labelDurum.Text = "Zamanlayıcı Başladı";
}
}
private void buttonDurdur_Click(object sender, EventArgs e)
{
if (this.timer1.Enabled) // Eğer zamanlayıcı çalışıyorsa
{
this.timer1.Stop(); // Zamanlayıcıyı durdur
this.labelDurum.Text = "Zamanlayıcı Durdu";
}
}
}
3. Tek Seferlik Gecikme
Timer
'ı tek seferlik bir gecikme sağlamak için de kullanabiliriz. Bunun için Tick
olayı tetiklendikten sonra zamanlayıcıyı durdururuz.
using System;
using System.Windows.Forms;
public partial class Form1 : Form
{
private Timer tekSeferlikTimer;
public Form1()
{
InitializeComponent();
// Tasarımcıda bir buton (buttonTekSeferlik) eklenmiş olsun
tekSeferlikTimer = new Timer();
tekSeferlikTimer.Interval = 3000; // 3 saniye sonra tetiklenecek
tekSeferlikTimer.Tick += new EventHandler(tekSeferlikTimer_Tick);
tekSeferlikTimer.Enabled = false; // Başlangıçta devre dışı
this.buttonTekSeferlik.Click += new EventHandler(buttonTekSeferlik_Click);
}
private void buttonTekSeferlik_Click(object sender, EventArgs e)
{
MessageBox.Show("3 saniye sonra bir mesaj göreceksiniz...");
tekSeferlikTimer.Start(); // Zamanlayıcıyı başlat
}
private void tekSeferlikTimer_Tick(object sender, EventArgs e)
{
tekSeferlikTimer.Stop(); // Zamanlayıcıyı durdur (tek seferlik olması için)
MessageBox.Show("Gecikmeli mesajınız geldi!");
}
}
Dikkat Edilmesi Gerekenler
- UI Thread Üzerinde Çalışma:
System.Windows.Forms.Timer
, uygulamanızın ana kullanıcı arayüzü (UI) thread'i üzerinde çalışır. Bu,Tick
olay işleyicisinin içinde uzun süren veya yoğun işlem gerektiren kodlar çalıştırırsanız, uygulamanızın kullanıcı arayüzünün donmasına (responsive olmamasına) neden olacağı anlamına gelir. - Uzun Süreli İşlemler İçin Alternatifler: Eğer
Tick
olayında uzun süreli veya arka plan işlemleri yapmanız gerekiyorsa,System.Windows.Forms.Timer
yerineSystem.Timers.Timer
veyaSystem.Threading.Timer
gibi diğerTimer
sınıflarını veya doğrudan threading (iş parçacığı) kullanmayı düşünmelisiniz. Bu sayede, uzun süren işlemler ayrı bir thread'de çalışır ve UI thread'i donmaz. - Hassasiyet:
Timer
'ınInterval
özelliği, tam olarak belirtilen milisaniye sonra olayın tetikleneceğini garanti etmez. İşletim sisteminin ve diğer işlemlerin yoğunluğuna bağlı olarak küçük gecikmeler yaşanabilir. Çok yüksek hassasiyet gerektiren uygulamalar için farklı zamanlama mekanizmaları gerekebilir.
Evet sevgili Webkolog.net okurları, bu yazımızda C# .NET Framework 4 ile Timer
kontrolünün temel özelliklerini, kullanım senaryolarını ve dikkat edilmesi gereken noktaları detaylı bir şekilde inceledik. Timer
, Windows Forms uygulamalarınızda zaman bazlı olayları yönetmek ve periyodik görevleri otomatikleştirmek için basit ama etkili bir araçtır. Kullanıcı arayüzünü güncelleyen sayaçlardan, belirli aralıklarla veri kontrol eden mekanizmalara kadar birçok alanda kullanılabilir. Umarım bu rehber, C# .NET Framework 4 ile uygulamalar geliştirirken size yardımcı olur. Bir sonraki yazımda, C# dilinin diğer önemli yapı taşlarını keşfetmeye devam edeceğiz. Webkolog.net'i takipte kalın!
Hepinize zamanı verimli kullandığınız ve başarılı geliştirme süreçleri dilerim!
0 yorum:
Yorum Gönder