C# Web Browser Sayfanın Yüklenmesini Beklemek, web browser ile güne başladık madem o zaman bir kaç tane daha ders ekleyeyim dedim. Kısacası bugün web browser günü oldu. :D Bu dersimizde bir internet sitesinden veri almamız gerektiğinde sayfa tamamen yüklendikten sonra işlemlerine devam edilmesi gereken durumlarda gerek oluyor.
C# Web Browser Sayfanın Yüklenmesini Beklemek
Diyelim ki bir bayi panelinden bilgi sorgulaması yapmanız gerek. Login sayfası yüklendikten sonra kullanıcı adı ve şifresi girilmesi gerek değil mi? Aksi halde kodlarımız NullReferenceException hatası verecektir.
Bu gibi durumlarda kodlarımız sayfa tamamen yüklendikten sonra çalışmaya devam etmesi gerekiyor değil mi? Bu yüklenme sırasında kodlarımızı bekletmeliyiz ki hata almayalım.
Bu işlem için bir çok yöntem denedim. Mesela ilk denediğim Thread sınıfı olmuştu ama istediğim performansı alamadım. O yüzden başka arayışlar içerisine girdim. Uzun süren araştırmalarım sonucunda %100 olmasa da %70, %80 oranında çözüm olan bir metod buldum. Şimdi bu metodu da kendi eğitim setimde sizlerle paylaşmak istiyorum.
Öncelikle kodlarımızı verelim.
private void WB_Yuklenmesini_Bekle() { WebBrowserReadyState loadStatus = default(WebBrowserReadyState); int beklemeSuresi = 100000; int sayac = 0; while (true) { loadStatus = webBrowser1.ReadyState; Application.DoEvents(); if ((sayac > beklemeSuresi) || (loadStatus == WebBrowserReadyState.Uninitialized) || (loadStatus == WebBrowserReadyState.Loading) || (loadStatus == WebBrowserReadyState.Interactive)) { break; } sayac += 1; } sayac = 0; while (true) { loadStatus = webBrowser1.ReadyState; Application.DoEvents(); if (loadStatus == WebBrowserReadyState.Complete) { break; } sayac += 1; } }
Beklemeyi sağlayan metodumuz yukarıdaki gibidir arkadaşlar. Bu metod sayesinde sayfa yüklenene kadar kodlarımızı bekletiyoruz. Ancakkkkkkkk….
%70, %80 oranında demiştim değil mi?
Bazı sayfalar çok geç yükleniyor. Yada bir şekilde yüklendi olarak görünüyor ama tam olarak yüklenmemiş oluyor. Tam olarak yüklenmeme durumu bizim işimizi yapmamızı sağlayacak kadar olması durumundan bahsediyorum.
Yani sayfa açıldı ama henüz WebBrowser nesnesine yansımadı ise bu işimize gelmeyen bir durum oluyor. Bunu nasıl çözüyoruz peki?.. Çok basit işte böyle….
Size giriş sayfasını açacak bir metod vereyim. Direk projemden kopyaladım ve yapıştırıyorum.
private void GirisSayafasiniAc() { webBrowser1.Navigate(url_giris); waitTillLoad(); waitTillLoad(); waitTillLoad(); waitTillLoad(); waitTillLoad(); lbl_bilgi.Text = "Giriş Sayfası Açıldı."; Application.DoEvents(); }
:D :D :D
Düz mantık bir kaç kere tekrarlaması… Elbette 5 kere alt alta yapıştırmam demek 5x fazladan beklemesi anlamına gelmiyor. Normalden biraz daha fazla bekliyor ama işi garantiye almış oluyoruz. Bu projem net üzerinden çalıştığından çok hızlı çalışması gerekmiyor. Bu sayede performansa çok takılmaya gerek kalmıyor.
C# Web Browser Sayfanın Yüklenmesini Beklemek, yazımda bu kadardı dostlar. Diğer yazılarımızda görüşmek üzere.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Sadece kopyala yapıştır yapılacak bir işlem olduğunda github projeme ekleme gereği duymadım arkadaşlar. Görmek isterseniz, buraya tıklayarak Github projeme ulaşabilirsiniz.
Sağlıcakla ve takipte kalın…