2009-04-20 4 views
10

:Invoke nasıl çalışır? İş parçacığının yalnızca 1 komut satırı yok mu? Ben C# Çağırma fonksiyonu (şimdi GUI iplikten GUI işleyen bir yöntemi çağırmak için çalışan iş parçacığı çağrı düşünüyorum) çalışabilmesi nasıl mümkün olduğunu bilmek istiyorum

varsayalım İki konuları var ve Bunların her biri, şu anda yürütülen bir talimatı işaret eden, inaktivasyon işaretçisine sahiptir.

Şimdi, GUI iş parçacığında bir temsilci çalıştırmak için çalışan iş parçacığındaki Invoke (Çağrılar) 'ı çağırıyorum. Bir GUI iş parçacığı zaten yönerge işaretçisi (IP) olduğunda ve her bir iş parçacığının yalnızca bir tane olduğunda bu nasıl mümkündür? Kodumu aniden çağırdığımda bu IP ile ne olur? Ve GUI iş parçacığının daha sonra ne yapıyor olsa da devam etmesine nasıl yardımcı olur (eski IP'si bir şekilde geri yüklenir)?

Ben f() bazı diğer parçacığı bağlamında yürütülür bir şekilde iplik 1'den bir f fonksiyonu() aramak istediğinizde bu sorunun

genelleme, o yapılır nasıl ...

Aydınlanma için teşekkürler :)!

cevap

10

Hedef iş parçacığına bir Pencere iletisi gönderir. İş parçacığı, İşe Alım için bir ileti döngüsünde olmalıdır. İş parçacığı iletiyi aldığında, temsilci çağırır.

Çapraz iş parçacıklı IP değişiklikleri gerekli değildir - aslında IP değiştirilirse hedef iş parçacığı hemen hemen çarpılır.

+2

Yanıt doğru, ama sadece açık olması gerekirse, UI iş parçacığı ileti pompası çalıştırıldığında iletiyi alacak ve işleyecek olan bir Pencere İletisi gönderiliyor. – Lucero

+0

Aslında, çalışma zamanı, bazı durumlarda koşu parçasını aktif olarak önceden boşaltabilmek ve kendi işini yapmaya başlayabilmektedir. Detaylarda açık değilim; Bunlardan en az biri çöp toplamaya başvurmayı içerir ancak başkaları da olabilir. – Promit

+2

İkinize de teşekkürler - böylece hedef iplik meşgul olduğunda, yöntem sadece iş parçacığı bittikten sonra çağrılabilir ve mesajları işlemeye başlayabilir. Ve bunun için araçlar, bazı yükte temsilci parametreleri olan bir Windows mesajıdır. Teşekkürler, cevabı google denedim, ama her yerde 'Sadece Invoke ekle ve iyi olacaksın' öğreticiler sadece ... –