développer des interfaces réactives avec wpf
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/1.jpg)
![Page 2: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/2.jpg)
2
Développer des interfaces réactives avec WPF08/02/2011David CATUHEDirecteur généralBewiseEric Vernié Microsoft France
![Page 3: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/3.jpg)
3
Développer des interfaces réactives avec WPF
Technologies de WPF pour l’asynchronisme
Introduction au Dispatcher de WPF
Comprendre le fonctionnement des interfaces Windows
![Page 4: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/4.jpg)
4
Sommaire• La boucle de messages• WPF et le dispatcher• Outils pour la gestion du multi-threading• Contrôler ses threads• Binding et parallélisme
![Page 5: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/5.jpg)
5
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
![Page 6: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/6.jpg)
6
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
![Page 7: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/7.jpg)
7
DémoComprendre ce qui se passe : Faire sa propre gestion des messages Windows en .NET
![Page 8: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/8.jpg)
8
Sommaire• La boucle de messages• WPF et le dispatcher• Outils pour la gestion du multi-threading• Contrôler ses threads• Binding et parallélisme
![Page 9: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/9.jpg)
9
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
![Page 10: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/10.jpg)
10
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é
![Page 11: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/11.jpg)
WPF et le dispatcher (code)Dispatcher.Invoke(DispatcherPriority.SystemIdle,
new Action(() => { … }));
![Page 12: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/12.jpg)
12
DémoUtiliser la priorité du dispatcher pour faire « respirer » son application ou « Comment faire un Application.DoEvents en WPF »
![Page 13: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/13.jpg)
13
DémoUtilisation du dispatcher pour gérer un wait panel
![Page 14: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/14.jpg)
14
Sommaire• La boucle de messages• WPF et le dispatcher• Outils pour la gestion du multi-threading• Contrôler ses threads• Binding et parallélisme
![Page 15: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/15.jpg)
15
Outils pour le multi-threading• Background Worker
• Encapsulation d’un travail asynchrone• Introduit par les Windows Forms• Utilisation du SynchronisationContext
(DispatcherSynchronizationContext )
![Page 16: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/16.jpg)
16
Outils pour le multi-threading• DispatcherTimer
• Timer exécuté sur l’UI thread• Utilisation du dispatcher et de la priorité
![Page 17: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/17.jpg)
17
Outils pour le multi-threading /Asynchronisme• TPL et ThreadPool
• Threads et ThreadPool• Gestion de base des threads du framework
• Task Parallel 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
![Page 18: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/18.jpg)
18
Démoasync et await
![Page 19: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/19.jpg)
19
Sommaire• La boucle de messages• WPF et le dispatcher• Outils pour la gestion du multi-threading• Contrôler ses threads• Binding et parallélisme
![Page 20: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/20.jpg)
20
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
![Page 21: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/21.jpg)
21
DémoChargement d’images sur le web
![Page 22: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/22.jpg)
22
Sommaire• La boucle de messages• WPF et le dispatcher• Outils pour la gestion du multi-threading• Contrôler ses threads• Binding et parallélisme
![Page 23: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/23.jpg)
23
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
![Page 24: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/24.jpg)
24
DémoUtilisation du Binding.IsAsync
![Page 25: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/25.jpg)
25
DémoMise en place d’un chargement asynchrone d’images dans un WrapPanel
![Page 26: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/26.jpg)
26
MSDN et TechNet : l’essentiel des ressources techniques à portée de clic
http://technet.com http://msdn.com
Portail administration et infrastructure pour informaticiens
Portail de ressources technique pour développeurs
![Page 27: Développer des interfaces réactives avec WPF](https://reader035.vdocuments.site/reader035/viewer/2022062316/568163cc550346895dd50ba8/html5/thumbnails/27.jpg)