Application.DoEvents nedir?

alattin (17127) 5 yıl önce sordu

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

Toplam 1 cevap


alattin (17127) 5 yıl önce cevapladı

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 5 yıl önce

@ahmet5847 anlaşılır olmuştur umarım.

ahmet5847 5 yıl önce

Sadece bana değil diğer insanların öğrenebileceği bir şekilde anlattığın için teşekkürler :D

alattin 5 yıl önce

@ahmet5847 amacımız ihtiyacı olan herkese destek olabilmek. Her zaman buradayız ;)