1 / 27

Développer des interfaces réactives avec WPF

Développer des interfaces réactives avec WPF. 08/02/2011 David CATUHE Directeur général Bewise Eric Vernié Microsoft France. Développer des interfaces réactives avec WPF. Sommaire. La boucle de messages WPF et le dispatcher Outils pour la gestion du multi-threading

zody
Download Presentation

Développer des interfaces réactives avec WPF

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Développer des interfaces réactives avec WPF 08/02/2011 David CATUHE Directeur général Bewise Eric Vernié Microsoft France

  2. Développer des interfaces réactives avec WPF

  3. Sommaire • La boucle de messages • WPF et le dispatcher • Outils pour la gestion du multi-threading • Contrôler ses threads • Binding et parallélisme

  4. La boucle de messages • Toutes les fenêtres sous Windows doivent avoir une boucle de messages: • Message Loop • Message Pump : récupération des messages • Moyen de communication entre l’OS et ses applicatifs

  5. La boucle de messages • La boucle des messages tourne dans le même thread que le contrôle de l’UI dans WPF: • UI thread == message thread == thread principal • Si le thread principal est fortement chargé (ne « pompe » pas assez vite les messages), Windows le détecte et grise la fenêtre  « Not responding » • Objectif: • NE PAS SURCHARGER L’UI THREAD • Donc : • Maximiser l’usage des threads • Utiliser tous les cœurs (CPU) disponibles

  6. Démo Comprendre ce qui se passe : Faire sa propre gestion des messages Windows en .NET

  7. Sommaire • La boucle de messages • WPF et le dispatcher • Outils pour la gestion du multi-threading • Contrôler ses threads • Binding et parallélisme

  8. WPF et le dispatcher • Les applications WPF démarrent avec 2 threads • Une pour dessiner l’interface (rendering thread) • Une pour gérer l’interface (UI thread) • Tous les objets graphiques sont liés à l’UI thread (Thread affinity) et ne peuvent être manipulés que par ce thread • Le rendering thread n’est pas accessible à l’utilisateur • Le développeur WPF doit absolument: • Développer le moins de code possible sur l’UI thread • Paralléliser le plus possible • Penser à la « respiration » de l’UI thread

  9. WPF et le dispatcher • Les objets graphiques (Visual) héritent tous de la classe DispatcherObject • Dispatcher : • Objet unique pour centraliser les accès à l’UI thread • Point d’entrée pour les autres threads • Point d’entrée vers la boucle des messages • Gestion de la priorité

  10. WPF et le dispatcher (code) Dispatcher.Invoke(DispatcherPriority.SystemIdle,  new Action(() =>                            {…                            }));

  11. Démo Utiliser la priorité du dispatcher pour faire « respirer » son application ou « Comment faire un Application.DoEvents en WPF »

  12. Démo Utilisation du dispatcher pour gérer un waitpanel

  13. Sommaire • La boucle de messages • WPF et le dispatcher • Outils pour la gestion du multi-threading • Contrôler ses threads • Binding et parallélisme

  14. Outils pour le multi-threading • Background Worker • Encapsulation d’un travail asynchrone • Introduit par les Windows Forms • Utilisation du SynchronisationContext (DispatcherSynchronizationContext)

  15. Outils pour le multi-threading • DispatcherTimer • Timer exécuté sur l’UI thread • Utilisation du dispatcher et de la priorité

  16. Outils pour le multi-threading /Asynchronisme • TPL et ThreadPool • Threads et ThreadPool • Gestion de base des threads du framework • TaskParallel Library • Framework de programmation parallèle • Simplification de la concurrence, de la synchronisation et de l’écriture de code parallèle • Notion de tâches (Task) • Au final : encapsulation de threads systèmes donc nécessité de passer par le Dispatcher pour atteindre l’UI. • En Beta : • TPLDataflow : à base d’agent • CTP Asynchrone : async et await

  17. Démo async et await

  18. Sommaire • La boucle de messages • WPF et le dispatcher • Outils pour la gestion du multi-threading • Contrôler ses threads • Binding et parallélisme

  19. Contrôler ses threads • « Trop de threads tue le thread » • Le framework fournit des outils pour contrôler ses threads: • TPL • Semaphore • Mutex • etc. • Tenir compte des limites des ressources: • Nombre de CPUs potentiels • Nombre de connexions réseau paralléles • Concurrence d’accès au matériel

  20. Démo Chargement d’images sur le web

  21. Sommaire • La boucle de messages • WPF et le dispatcher • Outils pour la gestion du multi-threading • Contrôler ses threads • Binding et parallélisme

  22. Binding et parallélisme • Utilisation de la propriété Binding.IsAsync • Introduit par WPF 3.0 • Le binding retourne dans un premier temps la valeur FallbackValue • De manière asynchrone (sans bloquer l’UI thread) le binding va attendre le calcul de sa valeur • Gestion d’un binding asynchrone manuel • Threads • Dispatcher

  23. Démo Utilisation du Binding.IsAsync

  24. Démo Mise en place d’un chargement asynchrone d’images dans un WrapPanel

  25. MSDN et TechNet: l’essentiel des ressources techniques à portée de clic • Portail administration et infrastructure pour informaticiens • Portail de ressources technique pour développeurs http://technet.com http://msdn.com

More Related