Développer des interfaces réactives avec WPF

Preview:

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 Presentation

Citation preview

2

Développer des interfaces réactives avec WPF08/02/2011David CATUHEDirecteur généralBewiseEric Vernié Microsoft France

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

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

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

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

7

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

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

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

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é

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

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

12

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

13

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

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

15

Outils pour le multi-threading• Background Worker

• Encapsulation d’un travail asynchrone• Introduit par les Windows Forms• Utilisation du SynchronisationContext

(DispatcherSynchronizationContext )

16

Outils pour le multi-threading• DispatcherTimer

• Timer exécuté sur l’UI thread• Utilisation du dispatcher et de la priorité

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

18

Démoasync et await

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

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

21

DémoChargement d’images sur le web

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

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

24

DémoUtilisation du Binding.IsAsync

25

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

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