Was passiert intern, wenn wir BeginInvoke für eine Variable vom Delegattyp aufrufen?Delegierte in Threads verwendet?
Antwort
Dies hängt vom Typ des Objekts ab, in dem Sie BeginInvoke aufrufen.
ISynchronizeInvoke ist die Schnittstelle, die BeginInvoke definiert. Er übergibt den Delegaten an das Objekt, das diese Schnittstelle implementiert, und dieses Objekt plant (sollte) den Thread so zu planen, dass er auf seinem eigenen Hauptthread ausgeführt wird.
Es gibt ein paar Objekte, die diese Schnittstelle implementieren. Der Dispatcher in WPF führt dies aus: Wenn Sie BeginInvoke für den Dispatcher aufrufen, wird der Delegat zur Warteschlange des Dispatchers hinzugefügt und ausgeführt, wenn es angemessen ist.
Die Control-Basisklasse in Windows Forms implementiert auch ISynchronizeInvoke (und ich glaube, das könnte sein, was Ihre Frage ansprach). In Windows Forms sind die Dinge viel komplizierter. Here is a great article erklären die Details. Wenn Sie BeginInvoke für ein Winforms-Steuerelement aufrufen, geschieht das im Grunde, dass ein spezieller Marshaller eine Windows-Nachricht erstellt, die an das Programm übergeben wird, und der UI-Thread stellt den auszuführenden Delegaten in eine Warteschlange. Es ist ein bisschen komplexer als das (wie dieser Artikel beschreibt), aber das ist die Grundidee. Der Delegat wird dann auf dem Hauptthread der Benutzeroberfläche ausgeführt.
Es gibt andere Objekte, die ISynchronizeInvoke implementieren, aber die meisten davon sind Objekte, die ihren eigenen Thread verwalten und ausführen. Diese Objekte verwalten eine Delegatenwarteschlange und fügen Ihre zu dieser Warteschlange hinzu, damit sie auf ihrem Thread ausgeführt wird.
- 1. Wo werden Ereignisse und Delegierte verwendet?
- 2. anonyme Delegierte in C#
- 3. Protokollvererbung + Delegierte in Swift
- 4. Delegierte Deklaration
- 5. iphone - Delegierte
- 6. Wie viele Threads verwendet curl_multi_exec?
- 7. Wie verwendet man Threads in Javascript
- 8. Delegierte vs Aktion, Func in C#
- 9. Delegierte funktionieren nicht
- 10. Ereignisse mit und ohne Delegierte in ASP.NET
- 11. Asynchrone Multicast-Delegierte
- 12. Entfernen Delegierte aus Ketten
- 13. Delegierte und Ereignisse
- 14. Frage über Delegierte
- 15. Delegierte und Rückrufe
- 16. Swift Delegierte und Protokoll
- 17. Warum verwendet PLINQ nur zwei Threads?
- 18. iOS-Dokumentation für Delegierte in Swift?
- 19. Delegierte in .NET: Wie sind sie aufgebaut?
- 20. C# Delegierte Leistung in XNA-Spiel
- 21. Wann würden Sie Delegierte in C# verwenden?
- 22. Verbundauthentifizierung und delegierte Authentifizierung in Salesforce
- 23. So behandeln Sie mehrere Delegierte
- 24. Wie arbeiten Delegierte (im Hintergrund)?
- 25. Objective C-Terminologie: Outlets & Delegierte
- 26. Starscream-Delegierte werden nicht aufgerufen
- 27. mehrere Listener für Delegierte iOS
- 28. Swift 2.2 #selector für Delegierte/Protokoll Kompilierungsfehler
- 29. C# Delegierte und Veranstaltungen Design/Architektur
- 30. Warum verwendet das iPhone SDK für einige Delegierte Kategorien anstelle von Protokollen?