Application.DoEvents nedir?

0

Application.DoEvents nedir? Application.DoEvents nasıl kullanılır?

alattin alattin (16984)
5 yıl önce sordu

    Toplam 1 Cevap


    0

    Application.DoEvents, mesaj kuyruğunda bekleyen tüm mesajların işlenmesini sağlar. Windows formları bir dizi mesaj döngüsü üzerine kuruludur. Bu mesajlar arka planda işlenir. Mesaj döngüsü, işletim sistemi tarafından forma gönderilen herhangi bir görevin yerine getirilip getirilmediğini takip eden bir döngüdür.

    Bir Windows form uygulaması çalışırken bu döngü sürekli çalışır. Bir Windows formu çalıştığında, yeni bir form yaratır ve yürütülecek olayları beklemeye başlar. Form her seferinde bir olayı işler ve bununla bağlantılı kodları çalıştırır.  Diğer tüm olaylar mesaj kuyruğuna atılır.

    Örneğin aşağıdaki gibi bir kodunuz olsun:

    while (1==1)
    {
    textbox1.Text = "uzmanim.net:" + Datetime.Now;
    
    }

    Bu örnekte form sonsuz döngüye girmiştir ve textbox1.Text özelliğine geçerli tarih atanıyor olsa bile ekranda gözükmeyecektir, form kilitlenecektir. Form o an döngüyü işlememtekedir ve textbox1 kontrolünün text özelliğini değiştirme isteği mesaj kuyruğuna gönderilecektir. Sonsuz döngü formu kilitleyecek ve Form güncellenmeyecektir.

    Eğer döngü içinde Application.DoEvents() kullanılırsa bu sefer  uygulamamız diğer tüm mesajları işleyecektir.

    Application.DoEvents() kullanımı çok basit kod örneklerinde sorun teşkil etmez ama dikkatli kullanılmalıdır.  Application.DoEvents()  kullanmak o anki iş parçasının durdurulmasına ve mesaj kuyruğundaki mesajların işlenmesine sebep olur. Mesaj kuyruğundaki bir mesaj başka bir olayı tetiklerse formunuz beklenmeyen davranışlar gösterebilir ve hata gidermesi zor bir hale gelebilir.

    Application.DoEvents() kullanmak yerine işlemleri yeni bir iş parçacığında (thread) yapmak daha doğru olacaktır. Asekron programla C# ile mümkündür. Bu tür işlemleri asenkron programlama ile yapmak daha doğru olur.

    alattin alattin (16984)
    5 yıl önce cevaplandı

    • @ahmet5847 anlaşılır olmuştur umarım. alattin 5 yıl önce
    • Sadece bana değil diğer insanların öğrenebileceği bir şekilde anlattığın için teşekkürler :D ahmet5847 5 yıl önce
    • @ahmet5847 amacımız ihtiyacı olan herkese destek olabilmek. Her zaman buradayız ;) alattin 5 yıl önce
    üyelik gerektirir

    Cevap yazabilmek için üye girişi yapmalısınız.

    Eğer uzmanim.net üyesiyseniz giriş yapabilirsiniz: üye girişi yap
    uzmanim.net'e üye olmak çok kolaydır: hemen kayıt ol