Merhabalar, C# Application Idle Olayı yazım ile C# eğitim setime devam ediyorum. Bu yazımda C# uygulamalarında Idle olayını yani boşta kalma olayını anlatmaya, gerekli kodlamayı nasıl yapacağımızı ve idle olayının ne olduğunu anlatmaya çalışacağım. Bu konuya bir araştırma yaparken denk gelmiştim. Daha sonra denerim ve yazısını yazarım diye düşünüp bir kenara kaydetmiştim. Az önce aklıma geldi ve yazısını yazayım dedim. Zaten çok da uzun bir yazı olmayacak.
C# Application Idle Olayı
Idle Nedir?
Idle boşta kalma, aylak, avare anlamlarına geliyor. Genellikle kullanım amacı boşta kalma durumunu tarif etmek içindir. İyi tamam da boşta kalma nedir? Boşta kalma durumu, yapacak hiçbir işlemin olmaması durumudur. Bilgisayar idle duruma girdiğinde uyku moduna geçmesi olayını bir örnek olarak verebiliriz. Yani hiçbir işlem yapılmadığı için bilgisayar idle (boşta) duruma geçer ve bu durum değişikliği bilgisayarın uyku moduna alınması sağlar. Tabi bu idle duruma geçme süresini biz belirleyebiliyoruz.
C# Application Idle Nedir?
Application Idle olayının tetiklenme süresi duruma göre farklılık gösterebilmektedir. Yani biz bir süre verememekteyiz. Kullanıcının ve uygulamanın yaptığı işlemlere bağlı olarak saniyede birkaç kez tetiklenebilir veya birkaç saniye boyunca hiç tetiklenmeyebilir. Projenizde bir takım veri güncellemelerini kontrol etmek istiyorsanız, Application.Idle yerine bir Timer olayı kullanmalısınız. Application.Idle her tetiklendiğinde zaman uyumsuz bir ağ isteği başlatırsanız, sunucunuzu saniyede çok sayıda (yedekli) istekle doldurabilirsiniz.
Bir veri tabanını veya ağ kaynağına bağlantıyı kontrol etmek için uygulamanızın Application.Idle eventine kod yazabilirsiniz. Ancak, uzun süren hiçbir şeyi yapmamaya dikkat etmelisiniz çünkü Application.Idle’ın normal çalışmasını engellerseniz, tüm uygulama kullanıcı ara yüzünüz donacaktır. Kısacası uygulama kilitlenecektir.
Şimdi Application Idle olayını anladığımıza göre basit bir uygulama ile bir test yapalım ve gözlerimizle bir görelim nasıl çalışıyor.
C# Application Idle Olayı Çalışma Şekli
Formuma 4 tane label, 2 tane multiline textbox ve 2 button ekledim. Görüntü aşağıdaki gibi.
Idle kodları sürekli çalışıyor. Bir tetiklemeye ihtiyacımız yok. Ancak bir yerden kısayolu da yok. Event atamasını elle yapmamız lazım. Boşta iken kısmında idle durumuna geçtiği anda idle = sayac şeklinde sürekli artan sayı verdirdim. Döngü başlat butonuna tıkladığımızda Bazı kodlar çalışırken kısmına For Looping yazacak. döngüyü kır butonuna tıkladığımızda da döngü duracak.
Burada beklediğimiz olay örgüsü şu şekilde.
Uygulama çalışmaya başladığında idle durumunda olacak ve idle kodları çalışacak. Ben döngüyü başlattığımda idle durumu bozulmuş olacak ve idle kodları çalışmayı durduracak. Döngüyü kırdığımda ise idle durumu tekrar aktif olacak ve idle kodları çalışacak. Kodlarım aşağıdaki gibidir. Açıklamalar kod alanındadır.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; namespace idle { public partial class Form1 : Form { public Form1() { InitializeComponent(); Application.Idle += Application_Idle; // event atamasını yapıyoruz. Başka türlü atama yapılamıyor. } int sayac = 0; private void Application_Idle(object sender, EventArgs e) { Thread.Sleep(100); // 100 ms bekledik sayac++; // sayacı +1 arttırdık textBox1.Text = "İdle = " + sayac.ToString(); // idle durumunda olduğunu göstermek için textbox'a birşeyler yazdık. } private void button1_Click(object sender, EventArgs e) { stop = 0; // durdurmayı iptal ettik sayac = 0; // sayacı sıfırladık ki sayı çok büyümesin for (int i = 0; i < 500; i++) { Thread.Sleep(100); // 100 ms beklettik textBox2.Text += "\r\n" + "For Looping "; // döngünün çalıştrığını göstermek için textbox'a birşeyler yazdık Application.DoEvents(); //döngünün bitmesini bekledem yapılan işlemi anında göster dedik. if (stop == 1) // eğer döngü durdurulmak istenmiş ise döngüyü kırıyoruz { break; } } } int stop = 0; private void button2_Click(object sender, EventArgs e) { stop = 1; // döngüyü kır } } }
Aşağıda kodların çalışmasına yönelik videoyu görebilirsiniz.
C# Application Idle Olayı yazımda bu kadardı arkadaşlar. Diğer yazılarımızda görüşmek üzere….
Yukarıda dediğim gibi bu dersin projesi de Github profilimde yerini almıştır. Bağlantıya tıklayarak projeye ulaşabilirsiniz.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız. Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…