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.