Transcript
Page 1: Développer des interfaces réactives avec WPF
Page 2: Développer des interfaces réactives avec WPF

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

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

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

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

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

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

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

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

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

WPF et le dispatcher (code)Dispatcher.Invoke(DispatcherPriority.SystemIdle, 

new Action(() =>                            {                               …                            }));

Page 12: Développer des interfaces réactives avec WPF

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

13

DémoUtilisation du dispatcher pour gérer un wait panel

Page 14: Développer des interfaces réactives avec WPF

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

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

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

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

18

Démoasync et await

Page 19: Développer des interfaces réactives avec WPF

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

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

21

DémoChargement d’images sur le web

Page 22: Développer des interfaces réactives avec WPF

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

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

24

DémoUtilisation du Binding.IsAsync

Page 25: Développer des interfaces réactives avec WPF

25

DémoMise en place d’un chargement asynchrone d’images dans un WrapPanel

Page 26: Développer des interfaces réactives avec WPF

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

Top Related