Await Event Handler ?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    doz4
    doz4's avatar
    Kayıt Tarihi: 12/Mayıs/2011
    Erkek

    merhabalar await ile ornegin webBrowser1_DocumentCompleted eventinin bitişini nasıl beklerim yani soyle ornek vereyim

    webBrowser1.navigate(www.google.com);

    await ............

    webBrowser1.navigate(www.tahribat.com);


    ....... yerinde await li bir sekilde document completed eventini kullanmak istiyorum yani orada o event bitene kadar bekleyecek

    simdiden teşekkürler.


    Zifti Kaynatsan Olurmu Seker Cinsini Sevdiğim Cinsine ceker
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    wb.Navigate(url);

    while(wb.ReadyState != WebBrowserReadyState.Complete)

    {

         Application.DoEvents();

    }

    MessageBox.Show("bitti");

    http://stackoverflow.com/questions/583897/c-sharp-how-to-wait-for-a-webpage-to-finish-loading-before-continuing

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek
    Daft bunu yazdı

    wb.Navigate(url);

    while(wb.ReadyState != WebBrowserReadyState.Complete)

    {

         Application.DoEvents();

    }

    MessageBox.Show("bitti");

    http://stackoverflow.com/questions/583897/c-sharp-how-to-wait-for-a-webpage-to-finish-loading-before-continuing

    hocam bu çözüm bence çok kötü. while süresince cpu'nun amına koyarsın.

    bu tür event mevzularında kod yapını normalde düşündüğün gibi daha çok event-handling mantığına göre düzenleyip yazman gerekiyor. Yani kodunun satır satır işlenerek değilde bazı durumlarda event yakalayarak çalıştığını düşünüp yazarsan daha sağlıklı kod yazarsın.


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    doz4
    doz4's avatar
    Kayıt Tarihi: 12/Mayıs/2011
    Erkek
    Daft bunu yazdı

    wb.Navigate(url);

    while(wb.ReadyState != WebBrowserReadyState.Complete)

    {

         Application.DoEvents();

    }

    MessageBox.Show("bitti");

    http://stackoverflow.com/questions/583897/c-sharp-how-to-wait-for-a-webpage-to-finish-loading-before-continuing

    bu şekilde biliyorum teşekkür ederim ama await kullanarak yapmaya çalışıyorum yani   Application.DoEvents(); dan uzak durmaya calısıyorum cok cpu kullandıgı için


    Zifti Kaynatsan Olurmu Seker Cinsini Sevdiğim Cinsine ceker
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo

    while ReadyState

    begin

    // bu araya sleep komutu eklersen programin freeze arada sapmalar olacaktir.
    onun yerine apilerinden faydanalarak alternatif bir sleep fonksiyonu yazabilirsiniz.
    PeekMessage,PostQuitMessage,TranslateMessage,DispatchMessage

    veya CreateEvent, MsgWaitForMultipleObjects w32 apilerinden faydalanabilirsin.

    end

    processMessages ve DoEvents gibi komutlarda freeze eder...

    wh0 tarafından 20/Oca/15 17:51 tarihinde düzenlenmiştir

    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    c# falan bilmem sadece örnek buldum

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    doz4
    doz4's avatar
    Kayıt Tarihi: 12/Mayıs/2011
    Erkek

    yokmu bi çözüm kaç saattir arıyorum bşy bulamadım yada anlamadım imkansız deildir bence ama nasıl olcak bilmiyorum


    Zifti Kaynatsan Olurmu Seker Cinsini Sevdiğim Cinsine ceker
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek
    doz4 bunu yazdı

    yokmu bi çözüm kaç saattir arıyorum bşy bulamadım yada anlamadım imkansız deildir bence ama nasıl olcak bilmiyorum

    await kullanabilmen için Asycn method olması gerekiyor hocam. Eğer webbrowserin asycn methodları yoksa await kullanamazsın. @saybirs ve @FCN webbrowser ile baya bi uğraşmışlardı belki onlara sorabilirsin.


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    doz4
    doz4's avatar
    Kayıt Tarihi: 12/Mayıs/2011
    Erkek

    boyle bişey buldum ama bundada hata alıyorum

    public static Task WhenDocumentCompleted(this WebBrowser browser)
    {
        var tcs = new TaskCompletionSource<bool>();
        browser.DocumentCompleted += (s, args) => tcs.SetResult(true);
        return tcs.Task;
    }

    kullanımıda bu sekilde;

    await browser.WhenDocumentCompleted();

    form1 için boyle hata veriyor

    public  partial class Form1 : Form

    Extension method must be defined in a non-generic static class   

     


    Zifti Kaynatsan Olurmu Seker Cinsini Sevdiğim Cinsine ceker
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    doz4
    doz4's avatar
    Kayıt Tarihi: 12/Mayıs/2011
    Erkek
    TeRRoR bunu yazdı
    doz4 bunu yazdı

    yokmu bi çözüm kaç saattir arıyorum bşy bulamadım yada anlamadım imkansız deildir bence ama nasıl olcak bilmiyorum

    await kullanabilmen için Asycn method olması gerekiyor hocam. Eğer webbrowserin asycn methodları yoksa await kullanamazsın. @saybirs ve @FCN webbrowser ile baya bi uğraşmışlardı belki onlara sorabilirsin.

    hocam awaiti suan baska sekillerde kullandıgımda sorun olmuyor yani mesela bi fonksiyon için falan kullanabiliyorum sıkıntım fonksiyon yerine document completeddi kullanabilmek


    Zifti Kaynatsan Olurmu Seker Cinsini Sevdiğim Cinsine ceker
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    buzukatak
    buzukatak's avatar
    Kayıt Tarihi: 27/Haziran/2010
    Erkek

    Şöyle bir örnek hazırladım, kendi koduna uygulayabilirsin.

     

    public partial class Form1 : Form
    {
    	public Form1()
    	{
    		InitializeComponent();
    	}
    
    	// olay tetiklenene kadar bekleyen
    	private async void button1_Click(object sender, EventArgs e)
    	{
    		await webBrowser1.NavigateAndWait("http://www.google.com.tr");
    		Debug.WriteLine("sayfa yüklendi");
    		// sonraki kodlar
    	}
    
    	// 10 saniye bekleyip devam eden çağrı
    	private async void button2_Click(object sender, EventArgs e)
    	{
    		var navTask = webBrowser1.NavigateAndWait("http://www.google.com.tr");
    		if (await Task.WhenAny(navTask, Task.Delay(10000)) == navTask)
    		{
    			Debug.WriteLine("sayfa yüklendi");
    		}
    		else
    		{
    			Debug.WriteLine("zaman aşımına uğradı");
    		}
    		// sonraki kodlar
    	}
    
    
    }
    
    public static class WebBrowserExtensions
    {
    	public static Task NavigateAndWait(this WebBrowser browser, string urlString)
    	{
    		var tcs = new TaskCompletionSource<bool>();
    		browser.Navigate(urlString);
    		browser.DocumentCompleted += (s, args) =>
    		{
    			browser.DocumentCompleted -= null;
    			tcs.TrySetResult(true);
    		};
    
    		return tcs.Task;
    	}
    }

    anlıyorum.
Toplam Hit: 1583 Toplam Mesaj: 12