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 invoke yöntemi aracılığıyla denetime çağrı yapmanız gerektiğini belirtir); aksi takdirde, false.

Uygulamalar

Öznitelikler

Açıklamalar

Windows Forms'daki 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 invoke yöntemi çağırmanız gerekip gerekmediğini belirlemek için kullanılabilir. Bu, hangi iş parçacığının denetimine sahip olduğunu bilmiyorsanız yararlı olabilir.

Uyarı

özelliğine InvokeRequired ek olarak, bir denetimde çağrılabilecek iş parçacığı güvenli dört yöntem vardır: Invoke,BeginInvokeEndInvoke ve CreateGraphics denetimin tutamacı zaten oluşturulmuşsa. Arka plan iş parçacığında denetimin tanıtıcısı oluşturulmadan önce çağrılması CreateGraphics , geçersiz çapraz 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 Invoke (ç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 false 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 durum, 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şı koruyabilirsiniz. Denetim tutamacı henüz oluşturulmadıysa, veya BeginInvokeçağrısından Invoke önce oluşturulana kadar beklemeniz gerekir. Genellikle, bu yalnızca uygulama için birincil formun oluşturucusunda bir arka plan iş parçacığı oluşturulursa (içinde olduğu gibi Application.Run(new MainForm()), form gösterilmeden veya Application.Run çağrılmadan önce).

Bir çözüm, arka plan iş parçacığını başlatmadan önce formun tanıtıcısının oluşturulmasını beklemektir. Özelliği çağırarak Handle tanıtıcı oluşturmaya 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 için bir denetim yerine tarafından SynchronizationContext döndürülen kullanmaktırSynchronizationContext.

Uyarı

İ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 Denetimlerine Thread-Safe ÇağrıLarı Yapma.

Şunlara uygulanır

Ayrıca bkz.