Aracılığıyla paylaş


Control.InvokeRequired Özellik

Tanım

Çağıran, denetimin oluşturulduğu iş parçacığından farklı bir iş parçacığında olduğundan, çağıranın denetime yöntem çağrıları yaparken çağırma yöntemini çağırması gerekip gerekmediğini belirten bir değer alır.

public:
 property bool InvokeRequired { bool get(); };
[System.ComponentModel.Browsable(false)]
public bool InvokeRequired { get; }
[<System.ComponentModel.Browsable(false)>]
member this.InvokeRequired : bool
Public ReadOnly Property InvokeRequired As Boolean

Özellik Değeri

true denetimi Handle çağıran iş parçacığından farklı bir iş parçacığında oluşturulduysa (bir çağırma yöntemi aracılığıyla denetime çağrı yapmanız gerektiğini belirtir); aksi takdirde, false.

Uygulamalar

Öznitelikler

Açıklamalar

Windows Forms denetimler belirli bir iş parçacığına bağlıdır ve iş parçacığı güvenli değildir. Bu nedenle, bir denetimin yöntemini farklı bir iş parçacığından çağırıyorsanız, çağrıyı uygun iş parçacığına sıralamak için denetimin çağırma yöntemlerinden birini kullanmanız gerekir. Bu özellik, bir çağrı yöntemi çağırmanız gerekip gerekmediğini belirlemek için kullanılabilir. Bu yöntem, hangi iş parçacığının bir denetime sahip olduğunu bilmiyorsanız yararlı olabilir.

Not

özelliğine InvokeRequired ek olarak, bir denetimde iş parçacığının çağrılmaya güvenli olduğu dört yöntem vardır: EndInvokeInvokeBeginInvokeve CreateGraphics denetimin tanıtıcısı zaten oluşturulmuşsa. Denetimin tanıtıcısı bir arka plan iş parçacığında oluşturulmadan önce çağrılması CreateGraphics , geçersiz iş parçacığı çağrılarına neden olabilir. Diğer tüm yöntem çağrıları için, farklı bir iş parçacığından çağrı yaparken bu çağırma yöntemlerinden birini kullanmanız gerekir.

Denetimin tanıtıcısı henüz yoksa, InvokeRequired pencere tutamacına sahip bir denetim veya form bulana kadar denetimin üst zincirinde arama yapar. Uygun tanıtıcı bulunamazsa yöntemi InvokeRequired döndürür false.

Bu, InvokeRequired gerekli değilse (çağrı aynı iş parçacığında gerçekleşir) veya denetim farklı bir iş parçacığında oluşturulduysa ancak denetimin tanıtıcısı henüz oluşturulmadıysa döndürebileceği falseInvoke anlamına gelir.

Denetimin tanıtıcısının henüz oluşturulmamış olması durumunda, yalnızca denetimdeki özellikleri, yöntemleri veya olayları çağırmamalısınız. Bu, denetimin tanıtıcısının arka plan iş parçacığında oluşturulmasına, denetimi ileti pompası olmadan bir iş parçacığında yalıtmasına ve uygulamanın kararsız olmasına neden olabilir.

Arka plan iş parçacığında döndürdüğünde InvokeRequiredfalse değerini IsHandleCreated de denetleyerek bu duruma karşı koruma sağlayabilirsiniz. Denetim tutamacı henüz oluşturulmadıysa, veya BeginInvokeçağrısından Invoke önce oluşturulana kadar beklemeniz gerekir. Genellikle, bu durum yalnızca uygulama için birincil formun oluşturucusunda bir arka plan iş parçacığı oluşturulduğunda (form gösterilmeden veya Application.Run çağrılmadan önce içinde Application.Run(new MainForm())olduğu gibi) oluşur.

Bir çözüm, arka plan iş parçacığını başlatmadan önce formun tanıtıcısının oluşturulmasını beklemektir. özelliğini çağırarak Handle oluşturma işlemini zorla veya arka plan işlemini başlatmak için olaya kadar Load bekleyin.

Daha da iyi bir çözüm, iş parçacıkları arası sıralama denetimi yerine tarafından SynchronizationContext döndürülen öğesini kullanmaktırSynchronizationContext.

Not

İletiyi işlemesi gereken iş parçacığı artık etkin değilse bir özel durum oluşturulabilir.

Çok iş parçacıklı Windows Forms denetimleri hakkında daha fazla bilgi için bkz. Nasıl yapılır: Dosyaları Aramak için Arka Plan İş Parçacığı Kullanma ve Nasıl yapılır: Windows Forms Denetimlere Thread-Safe Çağrıları Yapma.

Şunlara uygulanır

Ayrıca bkz.