Pierre's Embedded and Mobile Blog

Soulevons le capot des systèmes embarqués et mobiles

[Windows Phone 7–Mango] S’assurer que votre application marchera avec Mango : les “breaking changes”.

[Windows Phone 7–Mango] S’assurer que votre application marchera avec Mango : les “breaking changes”.

Rate This
  • Comments 1

Avec le nouveau SDK pour Mango, le WebClient, le contrôle WebBrowser et la ListBox ont subi des changements qui peuvent impacter le bon fonctionnement de votre application.

 

Le WebClient

Avant le WebClient revenait systématiquement dans le thread UI, peu importe le thread appelant. Cela change, et maintenant, il va revenir dans son thread appelant. Cela a un impact direct sur toutes les applications qui manipulent la couche UI depuis le callback du WebClient sans utiliser le dispatcher (c’est-à-dire, plein de gens !). Cela va maintenant provoquer une exception d’accès (Invalid cross-thread access).

Pour y remédier, la solution de facilité consiste à enfermer toutes vos manipulations de l’UI dans des appels au Dispatcher :

Deployment.Current.Dispatcher.BeginInvoke(() =>
{
    // Votre code qui manipule l’UI ici
});

Attention, cette méthode permet de refaire marcher rapidement votre application, mais il faut bien avoir conscience que manipuler l’UI de cette manière n’est de toutes façons pas une bonne pratique ! Votre WebClient devrait travailler dans votre couche d’accès aux données qui devrait certainement être séparée de votre couche UI (par le pattern que vous voulez !).

 

Le contrôle WebBrowser

Autre contrôle impacté par le passage à Mango, le contrôle WebBrowser. Mango va effectivement utiliser IE9 pour se mettre le plus à jour possible quant au support du HTML5 et le contrôle WebBrowser va aussi bénéficier de cette amélioration : toutefois comme tous les développeurs Web le savent, nouveau browser signifie souvent qu’il faut retester le code javascript/html/css pour s’assurer du rendu. Même si dès le départ, les expériences à base de contrôle WebBrowser ont été déconseillées (sauf pour afficher une page web évidement), certaines applications ont fait le choix de masquer leur site web mobile sous une expérience native… et dans ce cas, l’impact n’est que difficilement mesurable, car il dépend des standards utilisés pour ce site web ! Le user agent va également changer, et même si c’est maintenant considéré comme une mauvaise pratique de tailler l’expérience en fonction du user agent, certains choisissent parfois de le faire… il faudra faire attention ! Sachez que si vous souhaitez tester dès maintenant l’émulateur des outils de développement est en IE9 ! Si vous voulez tout savoir sur les capacités de IE9 et du contrôle WebBrowser dans Windows Phone 7 "Mango", rendez-vous sur MSDN : Web Development for Windows Phone 7.

 

Le ScrollViewer (et donc la ListBox)

Le dernier changement dont je voulais parler qui pourrait impacter certaines applications (beaucoup plus rares) vient du fait que maintenant le traitement des inputs (contacts) sur l’écran tactile qui se fait maintenant dans un thread à part. Encore une fois l’équipe Silverlight le décrit dans un post sur son blog. Cela peut impacter le rafraichissement de certaines propriétés du ScrollViewer. Ce dernier, à partir de Mango va aussi maintenant « manger » tous les évènements « ManipulationDelta » ce qui fait qu’ils ne seront plus disponibles pour les enfants du ScrollViewer. Si cela impacte votre application il suffit de rajouter une propriété à votre ScrollViewer :

ScrollViewer.ManipulationMode="Control"

Il n’y a que très peu de chance que votre application soit impactée par ces changements du ScrollViewer, en revanche, pour le WebClient et le contrôle WebBrowser, faites attention !! Enfin il y a d’autres changements qui ne sont pas forcément impactants mais que vous noterez au fur et à mesure, l’InputScope “Number” qui devient un vrai pavé numérique plutôt qu’un clavier complet avec chiffres par exemple… mais ces changements ne menacent pas directement votre application.

Page 1 of 1 (1 items)
Leave a Comment
  • Please add 1 and 2 and type the answer here:
  • Post