Timer kullanımı ve örnek uygulama
Belirli zaman aralıkları ölçmek çogu zaman ihtiyaç hissettigimiz bir fonksiyondur, veya daha önceden belirlenen bir zamanda bir işlemi gerçekleştirmek güncel hayatımızda sık sık karşılaştığımız şeylerdendir aslında. En günceli de belki backup işlemlerinin gündüz iş saatleri dışında bir zamanda gerçekleştirilmesi olarak verilebilir. Veya uygulamamız çalıştıktan sonra belirlediğimiz bir süre sonra bir başka işlemi gerçekleştirmesi olayına ihtiyaç duymaktayız.
Ben bu gibi ihtiyaçlara cevap verebilecegini düşündügüm bir uygulama geliştirdim. Programımızın 2 ana fonksiyonu var.
1- Çalışması gereken saati bildigimiz bir uygulamayı zamanında çalıştıracak bir fonksiyon (Zamanlanmış Görev)
2- Geriye doğru sayarak zamanı azaltan ve istersek bilgisayarımızıda o süre doldugunda kapata bilen fonksiyon (Geri Sayım)
Ben formu aşagıdaki gibi tasarladım;
Gördügünüz gibi sol tarafda zamanlanmış görev kısmı, sag tarafda ise geri sayımla tetiklenen kısım. Kullanım olarak farklılık gösterdigi için böyle kısımlamayı uygun gördüm. Projemize ekli 2 kontrol daha bulunmaktadır bunlar timer ve openFileDialog controlleri:
Timer kontrolunun kullana bilecegimiz bir tane Tick eventi var, bu event timer1.Interval de milisaniye olarak girilmiş süre her doldugunda tetiklenmektedir. Yani bizim ekledigimiz timer1 her 1 saniyede (1000 milisaniye) Tick eventini çalıştıracak. Diger openFileDialog ise bildiginiz gibi hangi dosyanın çalışrılacagını seçmesi için kullanıcıya yardımcı olacak ve bize hedef dosyanın disk üzerindeki yolunu verecek.
Bu uygulamamızın ana formu yüklenirken aşagıdaki kod çalışmakta:
private void Form1_Load(object sender, System.tickEventArgs e)
//şuan ki saati alıyoruz
Formdaki datetimepicker'lar yanlızca zamanı gösteriyorlar, ve hepsi default aynı güne eşitledik. Timer1 icin interval degerini 1000 ms (1 sn) girdik. Ve timer1'i aktif hale getirdik. Artık her 1 saniyede Tick eventini çalıştırıcak. Bu event aşagıdaki gibidir, açıklamalar kodla beraber yazılı.
//1 saniyelik bir zaman aralıgı yaratıyoruz, bu zaman aralıgı ekleyecegiz veya çıkaracagız alarm zamanından
TimeSpan b=new TimeSpan(0,0,1);
//2 kısımdan oluştugu için ayırt ediyoruz
//şuan ki saat bilgisini güncelliyoruz
//zaman farkını eksiltiyoruz
//sürenin geldigini kontrol ediyoruz
//tamamdır, uygulamayı başlatıyorz ve timerı durduruyoruz
//uygulamayı bagımsız olarak işletim sistemine bırakıyorz, artık o ilgilenecek
//ben en kolay olan bu yöntemi tercih ettim
//siz bi thread ile daha detaylı olarak kontrol edebilirsiniz
//eger gerisayımlı kısım çalıştırılıyorsa bu kodlar calışcak
//uygulama başlatacak kısım
//bilgisayarı kapatıcak kısım
//kapa isim li bir process yapiyoruz, bu sekilde kullanmamızın sebebi shutdown exesinin parametre ile calismasi
//shutdown islemini User32.DLL ilede gerçekleştire bilirdik, ben kolay yolu tercih ettim.
//-s shutdown icin -t 1 1 saniye beklemesi icin
System.Diagnostics.Process kapa = new System.Diagnostics.Process();
kapa.StartInfo.Arguments="-s -t 1";
Kullanıcı alarm kısmını seçer ve alarm süresini yazar ve uygulamayı seçtikten sonra, " Başlat " tuşuna basar. Bu tuş ile uygulamamız aktif olur, artık zamanı kollar ve süre doldugundan tetikler. Kodlar aşagıdaki gibidir:
private void btn_baslat_Click(object sender, System.EventArgs e)
//hangi kısımın başlatıldıgına bakıyoruz
//geçmiş bir zamana alarm verilmemesi için
if (dtp_suan.Value < dtp_alarm.Value)
//şuanki zaman degerini bir aralık olarak belirleyip farkı bulduk
//bu işlem için çok farklı yollar kullanıla bilir ben bu yolu örnek için uygun gördüm
//istedigin methodu kullanabilirsiniz farkı bulmak için
TimeSpan a=new TimeSpan(dtp_suan.Value.Hour,dtp_suan.Value.Minute,dtp_suan.Value.Second);
MessageBox.Show("Lütfen ileri ki bir zaman giriniz.","Hata");
MessageBox.Show("Zaman verisi tutarsız.","Hata");
Bu makalemizde timer controlunun kullanımı ve bu yolla Process çalıştırmayı inceledik, hepinize iyi çalışmalar.