29 Mayıs, 2009
Kategori:
Yazılım |
Yorum ekle »
|
Karmaşık birkaç işi iç içe bulunduran bir kronometre örneği hazırladım;
- Form1 üzerinden Thread ile Form2 oluşturuyoruz.
- Form1′deki başlat düğmesi ile Form2′nin bir metoduna erişiyoruz.
- Form2′nin başlat metodu Timer başlatıp 100 milisaniyede bir sayacı artırıyor.
- Thread içinde olduğumuz için sayaç değerini güncelleme işini Invoke ile yapıyoruz.
- Ve Form1′in durdur düğmesiyle Form2′deki Timer’ı durduruyoruz. (Tekrar başlatınca kaldığı yerden devam ediyor)

Başlat’a basıyoruz ve Timer çalışıyor;

Ve bitir ile durdurup, tekrar başlat ile devam edebiliyoruz.

Form1.cs şu şekilde;
ekle -> using System.Threading;
Form2 yeniform;
Thread Tirit;
ThreadStart Tirits;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Tirits = new ThreadStart(baslat);
Tirit = new Thread(Tirits);
Tirit.Start();
}
private void baslat()
{
yeniform = new Form2();
yeniform.ShowDialog();
}
private void button1_Click(object sender, EventArgs e)
{
yeniform.başla();
}
private void button2_Click(object sender, EventArgs e)
{
yeniform.bitir();
}
Form1 yüklendiğinde Thread ile Form2 oluşturup gösteriyoruz. Ve düğmeler ile Form2′nin metotlarını çağırıyoruz.
Form2.cs
int sayaç = 0;
System.Timers.Timer T;
public Form2()
{
InitializeComponent();
}
void T_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Güncelle(sayaç);
sayaç++;
}
public void başla()
{
T = new System.Timers.Timer(100);
T.Elapsed += new System.Timers.ElapsedEventHandler(T_Elapsed);
T.Start();
}
public void bitir()
{
T.Stop();
}
public void Güncelle(int Değer)
{
if (label1.InvokeRequired)
{
label1.BeginInvoke(
new MethodInvoker(
delegate() { Güncelle(Değer); }));
}
else
{
label1.Text = Değer.ToString();
}
}
Form2′nin başlat metodunda Timer başlatılıyor ve Timer’ın Elapsed metodunda Güncelle metoduyla Label’ı değiştiriyoruz.
Haydi bakalım.
|