SORU
5 ŞUBAT 2013, Salı


Çağırmak(Temsilci)

Kimse bu deyimi link Bu yazılı açıkla lütfen

Invoke(Delegate):

Yürütür sahibi olan iş parçacığı üzerinde belirtilen temsilcidenetimin temel pencere kolu.

Herkes (özellikle kalın) net almak mümkün değilim bunun ne anlama geldiğini açıklayabilir

CEVAP
5 ŞUBAT 2013, Salı


Bu soruyu nasıl yatıyor cevap C# ta kontrol eder

Windows Forms denetimleri, belirli bir konuya bağlı olan ve olmayan iş parçacığı güvenli. Eğer bir kontrol yöntemi arıyorsanız bu nedenle, bir farklı iplik, denetim yöntemlerini kullanmak gerekir uygun iplik çağrısı Şerif. Bu özellik için kullanılabilir eğer bir seçenek olabilir yöntemini çağırmak aramak gerekir olmadığını belirlemek iplik kontrol sahibi ne olduğunu bilmiyorsunuz.

Control.InvokeRequired

Etkili, ne denetimi "etkin çapraz dişli istisnalar engelliyor. hayat bu mu aradığınız kod parçacığında oluşur emin olun Çağırmak

Tarihsel bir bakış açısından, içinde .Net 1.1, bu aslında izin verildi. Bunun ne anlama geldiğini deneyin ve "" arka plan iş parçacığı ve bu konu çoğunlukla işe yarar. GUİ kod yürütebilir ki Bazen sadece etkili başka bir şey yapıyor iken GUI iplik interupting olduğun için app çıkmak için neden olur. BuCross Özel Dişli- GUI başka resim ise bir TextBox güncellemek için çalışırken hayal edin.

  • Hangi eylem önceliği var mı?
  • Hatta her ikisi de aynı anda gerçekleşmesi mümkün mü?
  • GUI çalıştırmak için gereken diğer tüm komutlar ne olacak?

Etkili, öngörülemeyen sonuçları çok var olan bir sıra, interupting. Çağırmak etkili "kuyruğuna ne yapmak istediğini, ve bu kural yürürlüğe girmiştir." almanın yolu kibardır Net InvalidOperationException) 2.0 ileriye atılmış.

Aslında perde arkasında neler olduğunu, ve "GUI iş Parçacığı", yararlı bir Mesaj Pompa veya Mesajın ne olduğunu anlamak için Döngü. ne anlama geldiğini anlamak için

Bu aslında zaten cevap içinde soru "What is a Message Pump" ve etkileşime girince içine bağlamak size gerçek mekanizması anlamak için okumak gerekir denetler.

Yararlı olabilir diğer okuma içerir:

What's up with Begin Invoke

Bir kardinal kuralları Windows GUI programlama tek. bir denetim için oluşturulan iş parçacığı erişim ve içeriğini/değiştirebilirsiniz (birkaç belgelenmiş istisnalar hariç). Bunu başka bir deneyin iplik ve öngörülemeyen davranışlara kilitlenme uzanan alırsınız yarım güncelleştirilmiş bir kullanıcı arayüzü için özel durumlar. Güncelleme için doğru yolu o zaman kontrol başka bir iş parçacığı için uygun bir mesaj göndermek için. uygulama ileti sırası. Mesaj pompa etrafında geldiğinde bu ileti yürütme, denetim, aynı güncellenecektir oluşturulduğu iş parçacığı (unutmayın, pompa ana üzerinde çalıştığı mesaj thread).

ve, temsili bir örnek ile daha fazla kod ağır bir bakış için:

Invalid Cross-thread Operations

// the canonical form (C# consumer)

public delegate void ControlStringConsumer(Control control, string text);  // defines a delegate type

public void SetText(Control control, string text) {
    if (control.InvokeRequired) {
        control.Invoke(new ControlStringConsumer(SetText), new object[]{control, text});  // invoking itself
    } else {
        control.Text=text;      // the "functional part", executing only on the main thread
    }
}

InvokeRequired için bir takdir ettikten sonra, bu çağrı kadar ambalaj için bir uzantısı yöntemi kullanarak düşünebilirsiniz. Bu hünerle Yığın Taşması soru Cleaning Up Code Littered with Invoke Required kaplıdır.

Ayrıca ilginizi çekebilecek write up of what happened historically daha da var.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Besnik Ibrahimi

    Besnik Ibrah

    27 Mart 2010
  • boogie2988

    boogie2988

    6 NİSAN 2006
  • bored before i even began

    bored before

    30 Mart 2009