Arkadaşlar merhaba...
Bu yazımızda size ASP.NET AJAX kontrollerinden Timer kontrolünün kullanımının nasıl olduğundan ve hangi durumlarda kullanabileceğimizden bahsedeceğim.
Biz biliyoruz ki Windows uygulamalarında Timer diye bir komponent vardır ve bu komponentin görsel herhangi bir özelliği yoktur.Bu kontrolün en önemli özelliği şudur ki; Tick adında bir eventi,Interval diye de bir özelliği vardır.Örneğin windows formuna eklenen bir Timer kontrolünün Interval özelliğini 1000 yapar isek ve Tick eventine de Timer_Tick metodunu aktarıp,o metod içerisinde de ekrana tarihi yazdırsak...
Bunun anlamı şudur; Her 1000 ms’de(1sn) bir ekrana yeni tarih yazılacaktır.Yani bir metod her 1000 milisaniyede bir işletilecektir.Timer komponentinin en önemli görevi budur ve senkron bir şekilde çalışmaktadır.Öyle ki Timer_Tick metodu işletilirken kullanıcı ile arayüz arasında etkileşim olmamaktdır.Evet Windows Timer’ı senkron bir şekilde çalışır.
Eğer ASP.NET ile uğraşıyor iseniz şu cümleyi kurma olasılığınız yüksektir;
“Keşke Timer komponentinin aynısı ASP.NET’de de olsa!..”
Bizler biliyoruz ki ASP.NET uygulamaları server tabanlıdır yani bir istek client tarafından geldiğinde sayfa işletilir ve html çıktısı üretilip client bilgisayara browser’da gösterilmek üzere gönderilir. Dolayısıyla her x milisaniye de bir şu C# metodum çalışsın diyemeyiz zira sayfa üretilip client’a gönderildiğinde server herşeyi unutmaktadır ve C# kodlarının işletimi durur.Biz biliyoruz ki client tarafında çalışabilecek,işletilebilecek kod javascript kodudur.Eğer ben javascript kullanarak her x milisaniyede bir server’a bir metod işletmesini söyleyebilirsem bu problemin üstesinden gelebilirim.
İşte ASP.NET Ajax Timer kontrolü tam bu noktada ortaya çıkmaktadır.Kullanımı aynı Windows Forms uygulamalarında olduğu gibidir.Tabi Timer kontrolleri Ajax kontrolüdür ve Windows uygulamalarında olduğu gibi senkron bir şekilde çalışmazlar aksine asenkron post back işlemi gerçekleştirirler.Tam bu noktada Timer kontrolünün UpdatePanel ile kullanımı ortaya çıkar.Öyle bir şey yapayım ki her 1000 milisaniye de bir UpdatePanel içeriği asenkron bir şekilde yenilensin.
Örnek senaryomuz Timer,ScriptManager ve UpdatePanel kullanımını örneklemektedir.Her 1000 milisaniye de(1sn) bir sistem tarihini ekranda asenkron bir şekilde gösteren,gösterirken kullanıcı ile arayüz iletişimi kesmeyen programımızı gerçekleştirmeye başlayalım.
Öncelikle Bir adet ASP.Net Ajax-Enabled Web Site projemizi AjaxTimer ismini vererek oluşturalım. Ardından Default.aspx formumuzu aşağıdaki gibi tasarlıyalım;

Bu tasarımın html tarafındaki görünümü şu şekildedir;

Not: Kod karmaşasını azaltmak üzere görselliği sağlayan kodlar silinmiştir.
Tasarımı yukarıdaki gibi yaptıktan sonra Timer kontrolünün Interval özelliğini 1000 yapıp Tick eventi için aşağıdaki metodu gerçekleştiriyoruz;
Bu metod hem lblTarihIn hemde lblTarihOut Label’larının içerisine o an ki sistem tarihini yazmaktadır.Yani en azından bunun olmasını umuyoruz fakat böyle olmayacaktır.Zira biz biliyoruz ki UpdatePanel içerisine konan bir kontrol tarafından gerçekleştirilen Post back işleminde sadece UpdatePanel kontrolü içerisindeki içerik yenilenir,UpdatePanel dışındaki alan yenilenmemektedir. (Referans olarak UpdatePanel kontrolünün örneklendiği makaleme bakabilirsiniz)
|
protectedvoid Timer1_Tick(object sender, EventArgs e)
{
lblTarihIn.Text = lblTarihOut.Text = DateTime.Now.ToString();
}
|
Programı çalıştırdığımızda sırasıyla şu 3 görüntüyü elde ederiz;

UpdatePanel dışındaki Label içeriğinin değişmediğini görüyoruz.Eğer her iki Label’ında etiketinin değişmesini istiyor isek iki Label nesnesini de UpdatePanel içerisine almamız gerekiyor.
Peki şöyle bir soru sorabilirsiniz;Timer kontrolünü UpdatePanel dışına alsam nasıl çıktı elde ederiz?
Eğer Timer kontrolünü sayfaya doğrudan koyarsak yani herhangi bir UpdatePanel içerisine yerleştirmez isek her iki Label içeriği de güncellenecek fakat asenkron post back işlemi değil senkron post back işlemi gerçekleşecektir.Dolayısıyla her 1000 milisaniyede bir sayfa tamamen temizlenip server tarafından yeni çıktı üretilip browser’da görüntülenecektir.
Peki UpdatePanel dışına aldığımız Timer kontrolü için UpdatePanel’de Trigger oluşturur isek nasıl bir çıktı elde ederiz?

Bu durumda da yine, Timer kontrolü UpdatePanel içindeyken aldığımız çıktının aynısını alırız.
Eğer sitemizin bir sayfasında Timer kontrolü var ise ve her x milisaniyede bir asenkron post back işlemi gerçekleşiyor ise ve aynı anda çok fazla kişi aynı sayfayı talep ediyorsa bu durumda server tarafında çok fazla post back işlemi gerçekleşecektir.Client sayısı ve post back sayısı arttıkça server çok yoğun olacak ve kullanıcılara sayfanın gönderim süresi uzayacak ve server sürekli meşgul olacaktır.O yüzden Timer kontrolünün çok gerekli durumlarda kullanılmasını tavsiye ediyorum. Eğer bir haber sitesi yapıyor iseniz ve sürekli yeni haberler sisteminize ekleniyor ise bu durumda Timer kullanmanız mantıklıdır fakat bu durumda bile sürekli post back işlemi gerçekleştirmek server’da yoğunlaşmaya sebep olabilir o yüzden Interval değerini makul bir değerde tutmak gerekir.
Bu makalemizin de sonuna geldik,gelecek makalelerimde ASP.Net Ajax teknoloji üzerine tekrar bilgilerimi sizinle paylaşacağım.
Hepinize başarılar dilerim,hoşçakalın.
Nurettin ŞİMŞEK