Aktualisiert: November 2007
Führt den angegebenen Delegaten für den Thread aus, der das dem Steuerelement zugrunde liegende Fensterhandle besitzt.
Namespace:
System.Windows.Forms
Assembly:
System.Windows.Forms (in System.Windows.Forms.dll)
Visual Basic (Deklaration)
Public Function Invoke ( _
method As Delegate _
) As Object
Visual Basic (Verwendung)
Dim instance As Control
Dim method As [Delegate]
Dim returnValue As Object
returnValue = instance.Invoke(method)
public Object Invoke(
Delegate method
)
public:
Object^ Invoke(
Delegate^ method
)
public Object Invoke(
Delegate method
)
public function Invoke(
method : Delegate
) : Object
Parameter
- method
- Typ: System..::.Delegate
Ein Delegat, der eine aufzurufende Methode im Threadkontext des Steuerelements enthält.
Rückgabewert
Typ:
System..::.Object
Der Rückgabewert des aufgerufenen Delegaten bzw. nullNothingnullptrNULL-Verweis (Nothing in Visual Basic), wenn der Delegat keinen Wert zurückgibt.
Delegaten sind Funktionszeigern in den Sprachen C oder C++ ähnlich. Delegaten kapseln in einem Delegatobjekt einen Verweis auf eine Methode. Das Delegatobjekt kann anschließend an den Code übergeben werden, der die Referenzmethode aufruft. Die aufzurufende Methode kann zur Kompilierzeit unbekannt sein. Im Gegensatz zu Funktionszeigern in C oder C++ sind Delegaten objektorientiert, typsicher und sicherer.
Die Invoke-Methode durchsucht die übergeordnete Kette des Steuerelements, bis sie ein Steuerelement oder ein Formular findet, das über ein Fensterhandle verfügt, wenn das zugrunde liegende Fensterhandle des aktuellen Steuerelements noch nicht vorhanden ist. Wenn kein geeignetes Handle gefunden werden kann, löst die Invoke-Methode eine Ausnahme aus. Während des Aufrufs ausgelöste Ausnahmen werden an den Aufrufer weitergegeben.
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. Verwenden Sie bei allen anderen Methodenaufrufen eine der Aufrufmethoden für das Marshallen des Aufrufs an den Steuerelementthread. |
Der Delegat kann eine Instanz von EventHandler sein. In diesem Fall enthält der Senderparameter dieses Steuerelement, und der Ereignisparameter enthält EventArgs..::.Empty. Der Delegat kann auch eine Instanz von MethodInvoker oder jedes anderen Delegaten sein, der eine leere Parameterliste akzeptiert. Das Aufrufen eines EventHandler-Delegaten oder eines MethodInvoker-Delegaten ist schneller als das Aufrufen eines anderen Delegattyps.
Hinweis: |
|---|
Eine Ausnahme könnte ausgelöst werden, wenn der Thread, der die Meldung verarbeiten sollte, nicht mehr aktiv ist. |
Hinweis zu Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows CE:
In .NET Compact Framework-Anwendungen muss der Delegat eine Instanz von EventHandler sein. Ein Beispiel finden Sie unter Beispiel für Delegaten.
Im folgenden Codebeispiel werden Steuerelemente veranschaulicht, die einen Delegaten enthalten. Der Delegat kapselt eine Methode, mit der dem Listenfeld Elemente hinzugefügt werden. Diese Methode wird in dem Thread ausgeführt, der das zugrunde liegende Handle des Formulars besitzt. Wenn auf die Schaltfläche geklickt wird, führt Invoke den Delegaten aus.
' The following code assumes a 'ListBox' and a 'Button' control are added to a form,
' containing a delegate which encapsulates a method that adds items to the listbox.
Public Class MyThreadClass
Private myFormControl1 As MyFormControl
Public Sub New(myForm As MyFormControl)
myFormControl1 = myForm
End Sub 'New
Public Sub Run()
' Execute the specified delegate on the thread that owns
' 'myFormControl1' control's underlying window handle.
myFormControl1.Invoke(myFormControl1.myDelegate)
End Sub 'Run
End Class 'MyThreadClass
// The following code assumes a 'ListBox' and a 'Button' control are added to a form,
// containing a delegate which encapsulates a method that adds items to the listbox.
public class MyThreadClass
{
MyFormControl myFormControl1;
public MyThreadClass(MyFormControl myForm)
{
myFormControl1 = myForm;
}
public void Run()
{
// Execute the specified delegate on the thread that owns
// 'myFormControl1' control's underlying window handle.
myFormControl1.Invoke(myFormControl1.myDelegate);
}
}
// The following code assumes a 'ListBox' and a 'Button' control are added to a form,
// containing a delegate which encapsulates a method that adds items to the listbox.
public ref class MyThreadClass
{
private:
MyFormControl^ myFormControl1;
public:
MyThreadClass( MyFormControl^ myForm )
{
myFormControl1 = myForm;
}
void Run()
{
// Execute the specified delegate on the thread that owns
// 'myFormControl1' control's underlying window handle.
myFormControl1->Invoke( myFormControl1->myDelegate );
}
};
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile für Smartphone, Windows Mobile für Pocket PC
.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
.NET Framework
Unterstützt in: 3.5, 3.0, 2.0, 1.1, 1.0
.NET Compact Framework
Unterstützt in: 3.5, 2.0, 1.0
Referenz
Weitere Ressourcen