Freigeben über


Control.InvokeRequired-Eigenschaft

Ruft einen Wert ab, der angibt ob der Aufrufer beim Aufruf von Methoden des Steuerelements eine Aufrufmethode aufrufen muss, da sich der Aufrufer in einem anderen Thread als dem befindet, in dem das Steuerelement erstellt wurde.

Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)

Syntax

'Declaration
Public ReadOnly Property InvokeRequired As Boolean
'Usage
Dim instance As Control
Dim value As Boolean

value = instance.InvokeRequired
public bool InvokeRequired { get; }
public:
virtual property bool InvokeRequired {
    bool get () sealed;
}
/** @property */
public final boolean get_InvokeRequired ()
public final function get InvokeRequired () : boolean

Eigenschaftenwert

true, wenn das Handle des Steuerelements in einem anderen Thread als dem aufrufenden Thread erstellt wurde, sodass Aufrufe des Steuerelements durch eine Aufrufmethode erfolgen müssen), andernfalls false.

Hinweise

Steuerelemente in Windows Forms sind an einen bestimmten Thread gebunden und nicht threadsicher. Wenn Sie daher eine Methode des Steuerelements aus einem anderen Thread aufrufen, müssen Sie den Aufruf mithilfe einer der Aufrufmethoden des Steuerelements an den richtigen Thread marshallen. Anhand dieser Eigenschaft können Sie bestimmen, ob eine Aufrufmethode aufgerufen werden muss. Diese bietet sich an, wenn Sie nicht wissen, welcher Thread über ein Steuerelement verfügt.

Hinweis

Abgesehen von der InvokeRequired-Eigenschaft können vier Methoden in einem Steuerelement threadsicher aufgerufen werden: Invoke, BeginInvoke, EndInvoke und CreateGraphics. Für alle anderen Methodenaufrufe müssen Sie beim Aufrufen aus einem anderen Thread eine dieser Aufrufmethoden verwenden.

Wenn das Handle des Steuerelements noch nicht vorhanden ist, durchsucht InvokeRequired die Kette der übergeordneten Elemente bis zu einem Steuerelement oder Formular, für das ein Fensterhandle vorhanden ist. Wenn kein entsprechendes Handle gefunden wird, gibt die InvokeRequired-Methode false zurück.

Dies bedeutet, dass InvokeRequiredfalse zurückgeben kann, wenn Invoke nicht erforderlich ist (der Aufruf erfolgt an denselben Thread) oder wenn das Steuerelement in einem anderen Thread erstellt wurde, jedoch das Handle für das Steuerelement noch nicht vorhanden ist.

Wenn das Handle des Steuerelements noch nicht erstellt wurde, sollten Sie Eigenschaften, Methoden oder Ereignisse für das Steuerelement nicht aufrufen. Dadurch könnte das Handle des Steuerelements im Hintergrundthread erstellt werden, womit das Steuerelement in einem Thread ohne Nachrichtenfilter isoliert und die Anwendung destabilisiert wird.

Sie können durch Überprüfen des Werts von IsHandleCreated diesem Fall vorbeugen, wenn InvokeRequired in einem Hintergrundthread false zurückgibt. Wenn das Steuerelementhandle noch nicht erstellt wurde, müssen Sie abwarten, bis dies erfolgt ist, bevor Sie Invoke oder BeginInvoke aufrufen. Dies erfolgt i. d. R. nur dann, wenn im Konstruktor des primären Formulars für die Anwendung ein Hintergrundthread erstellt wird (wie in Application.Run(new MainForm()), bevor das Formular angezeigt wird oder Application.Run aufgerufen wurde).

Eine Möglichkeit besteht darin, erst nach der Erstellung des Formularhandles den Hintergrundthread zu starten. Entweder erzwingen Sie die Handleerstellung durch Aufrufen der Handle-Eigenschaft, oder Sie warten, bis das Load-Ereignis den Hintergrundprozess startet.

Eine noch bessere Lösung besteht darin, statt einem Steuerelement für threadübergreifendes Marshallen den SynchronizationContext zu verwenden, der von SynchronizationContext zurückgegeben wird.

Hinweis

Eine Ausnahme könnte ausgelöst werden, wenn der Thread, der die Meldung verarbeiten sollte, nicht mehr aktiv ist.

Weitere Informationen zu Multithread-Windows Forms-Steuerelementen finden Sie unter Gewusst wie: Verwenden eines Hintergrundthreads zur Dateisuche.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

Control-Klasse
Control-Member
System.Windows.Forms-Namespace
Invoke
InvokeGotFocus
InvokeLostFocus
InvokeOnClick
InvokePaint
InvokePaintBackground