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:
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
//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); private void timer1_Tick(object sender, System.EventArgs e) { //2 kısımdan oluştugu için ayırt ediyoruz if (rbt_zamanlanmis.Checked) { //şuan ki saat bilgisini güncelliyoruz dtp_suan.Value=DateTime.Now; //zaman farkını eksiltiyoruz dtp_fark.Value=dtp_fark.Value.Subtract(b); //sürenin geldigini kontrol ediyoruz if (dtp_fark.Value.Equals(DateTime.Parse("00:00:00"))) { //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 System.Diagnostics.Process.Start(txt_uyglmZG.Text); timer1.Stop (); } } else { //eger gerisayımlı kısım çalıştırılıyorsa bu kodlar calışcak dtp_fark2.Value=dtp_fark2.Value.Subtract(b); if (dtp_fark2.Value.Equals(DateTime.Parse("00:00:00"))) { //uygulama başlatacak kısım if (rbt_uyg.Checked) { System.Diagnostics.Process.Start(txt_uyglmGS.Text); timer1.Stop (); } //bilgisayarı kapatıcak kısım else { //bilgisayari kapatiyoruz timer1.Stop (); //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.EnableRaisingEvents=false; kapa.StartInfo.FileName="shutdown.exe"; kapa.StartInfo.Arguments="-s -t 1"; kapa.Start(); Application.Exit(); } } } }
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:
Bu makalemizde timer controlunun kullanımı ve bu yolla Process çalıştırmayı inceledik, hepinize iyi çalışmalar.
Kivanc OZUOLMEZ