Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

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)
[BrowsableAttribute(false)]
public bool InvokeRequired { get; }

Eigenschaftswert

Typ: System.Boolean
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.

Implementiert

ISynchronizeInvoke.InvokeRequired

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 Hinweis

Abgesehen von der InvokeRequired-Eigenschaft können vier Methoden in einem Steuerelement threadsicher aufgerufen werden: Invoke, BeginInvoke, EndInvoke und CreateGraphics, wenn das Handle für das Steuerelement bereits erstellt wurde. Das Aufrufen von CreateGraphics vor dem Erstellen des Handles des Steuerelements in einem Hintergrundthread kann zu unzulässigen threadübergreifenden Aufrufen führen. 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 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 und Gewusst wie: Threadsicheres Aufrufen von Windows Forms-Steuerelementen.

.NET Framework

Unterstützt in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Community-Inhalt Hinzufügen
Anmerkungen FAQ