Makale Özeti

Bu makalemizde bir çok uygulamamızda faydası dokunacak bir kaç konuyu irdeleyecegiz. Timer, makalemizdeki araçlardan en önemlisi. Timer hepinizin de bildigi gibi zamanın kullanımı ile ilgili bir araç. C#'ın gelişmiş nesne yapısı ile zamanla ilgili ihtiyaç duyduğumuz bütün fonksiyonları kolayca yerine getirebiliyoruz.

Makale

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
    dtp_suan.Value=DateTime.Now;
    dtp_alarm.Value=dtp_gerisayim.Value=dtp_fark.Value=DateTime.Parse(
"00:00:00") ;
    timer1.Interval=1000;
   
//zamanlayıcı başlatıyorz
    timer1.Start();
}

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);
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:

private void btn_baslat_Click(object sender, System.EventArgs e)
{

//hangi kısımın başlatıldıgına bakıyoruz
if
(rbt_zamanlanmis.Checked)
{
       try
       {
       //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);
             dtp_fark.Value=dtp_alarm.Value.Subtract(a);
           }
       else
           {
              MessageBox.Show("Lütfen ileri ki bir zaman giriniz.","Hata");
              dtp_alarm.Focus();
           }
        }

        catch

        {
            MessageBox.Show("Zaman verisi tutarsız.","Hata");
            dtp_alarm.Focus();
        }
}

else

{
       try
       {
             dtp_fark2.Value=dtp_gerisayim.Value;
       }
       catch
       {
            MessageBox.Show("Zaman verisi tutarsız.","Hata");
            dtp_alarm.Focus();
       }
}
}

Bu makalemizde timer controlunun kullanımı ve bu yolla Process çalıştırmayı inceledik, hepinize iyi çalışmalar.

Kivanc OZUOLMEZ

Kodlar