SORU
3 Mart 2011, PERŞEMBE


Uygulamanın kullanımı.()DoEvents

Application.DoEvents() C kullanılabilir#?

Bu VB6 DoEvents yaptığı GUI uygulaması, çok geri kalanı ile yetişmek için izin vermek için bir yol aynı yol çalışması mı?

CEVAP
3 Mart 2011, PERŞEMBE


Hmya, DoEvents kalıcı gizemi(). Buna karşı tepki çok büyük miktarda var, ama kimse neden olduğunu tam olarak açıklıyor"". kötü Bilgelik aynı tür "bir yapı mutasyona yok". EE, neden zamanı ve dili destekliyorsa o kadar da kötü bir yapı mutasyon geçiriyor mu? Aynı sebepten: eğer bunu doğru yap. yok eğer doğru değilse ayak kendinizi çekim Kolay. Ve doğru yaptığını bilmek gerekirtam olarakhangi DoEvents bu durumda ne yapar() kesinlikle grok kolay değil.

Aklıma hemen şu geldi: hemen hemen her Win program aslında DoEvents mesaj içermektedir(). Akıllıca ancak farklı bir adla gizlenmiş: () ShowDialog. DoEvents() bir iletişim uygulaması içinde donup kalan windows olmadan kalıcı olmasını sağlar.

Çoğu programcı DoEvents kendi kalıcı kendi döngü yazarken donma kullanıcı arayüzü durdurmak için kullanmak istiyorum. Kesinlikle, Windows iletileri gönderir ve herhangi bir boya isteklerine teslim alır. Sorun seçici değil ancak. Sadece boya mesajlar gönderir, başka şeyler de yapar.

Ve sorun bildirimleri bir dizi var. Monitörün önünde yaklaşık 3 metre. Kullanıcı DoEvents çağıran bir döngü sırasında örneğin ana pencereyi kapatabilir() çalışıyor. Bu eserler, kullanıcı arayüzü gitti. Ama kod hala döngü çalıştırma, durdurma, olmadı. O kadar da kötü değil. Çok, çok kötü.

Dahası da var: kullanıcı aynı menü aynı döngü başlamak için neden. Madde veya düğmesini tıklatın olabilir Önceki döngü askıya alınır ve yeni bir döngü baştan başlıyor. şimdi iç içe iki döngü yürütülüyor DoEvents(), Bu işe yarayabilir, ama çocuk ihtimali yok denecek kadar az. İç içe döngü sona erer ve özellikle asma, önceden tamamlanan bir iş bitirmeye devam eder. Eğer o bir istisna o zaman kesinlikle bomba değil diye veri feci şekilde karıştırılmış.

ShowDialog(). DoEvents yürütür() ama yapacak başka bir şey yok unutmayın.devre dışı uygulama tüm windowsiletişim dışında. 3 metre sorun çözüldü şimdi, kullanıcı bir mantığı berbat. Her ikisi de yakın--pencere ve Başlat--iş-yine başarısızlık modları çözülür. Ya da bir başka deyişle, kullanıcı programı farklı bir düzen içinde kod çalıştırmak için bir yolu yoktur. Kodunuzu test edildiğinde, çünkü sadece bir tahmin yürütme. Bir iletişim etkin olması ve kopyalayıp başka bir pencereden bir şey yapıştırmak için güçlü olmak değil nefret etmeyen diyaloglar son derece can sıkıcı oldu. Ama bu fiyatı.

DoEvents güvenli bir şekilde kodunuzu kullanmak için gereken budur. Yanlış tüm formları Etkin özelliği ayarı sorunları önlemek için hızlı ve verimli bir yoldur. Tabii ki, hiçbir programcı gerçekten bu işi seviyor. Ve gelmez. DoEvents kullanmamalısın neden olan). İş parçacığı kullanmanız gerekir. Onlar renkli ve gizemli yollarla ayağını vurmak yollar tam bir cephanelik el olsa bile. Ama sen sadece kendi ayağına ateş avantajı ile, (genellikle) kullanıcı ateş onun izin vermiyor.

C) gelecek sürümleri# VB.NET yeni, farklı bir silah sağlayacaktır bekliyor ve zaman uyumsuz anahtar kelimeler. WinRT ile büyük ölçüde sorun DoEvents ve ipler neden olur, ama küçük bir parçası ilham apı tasarımgerektirirsizin UI zaman uyumsuz bir işlem yapılırken güncel tutmak için. Bir dosyadan okuma gibi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bcbauer

    bcbauer

    7 ŞUBAT 2007
  • DJPixcell

    DJPixcell

    20 NİSAN 2007
  • itfigueres

    itfigueres

    12 EKİM 2013