Truc #5 : Les retours de Chooser sous WP

Les Choosers sont des boites de dialogues systeme qui permettent de choisir des informations en provenance du téléphone. C’est le cas par exemple pour la sélection d’image dans la galerie photo (PhotoChooserTask), de l’adresse d’un contact (AddressChooserTask) ou de la prise d’une photo (CameraCaptureTask).

Liste des choosers disponibles sous Windows Phone

Un exemple classique d’appel à un Chooser :

MonConstructeur()
{
  photoChooserTask = new PhotoChooserTask();
  photoChooserTask.Completed += new EventHandler<PhotoResult>(photoChooserTask_Completed);
}

void photoChooserTask_Completed(object sender, PhotoResult e)
{
   // on traite la photo choisie
}

Les choosers sont les garants de la sécurité sous Windows Phone puisqu’ils agissent comme des sas entre les données de l’application et celles de l’utilsateur. Mais savez-vous qu’ils peuvent aussi faire planter votre application si vous n’y prenez garde ?
En effet toutes ces boites comportent un évenement Completed appelé lorque l’action est terminée. Par design, ces évenements ont une durée de vie définie (quelques secondes). Si cette durée est dépassée, l’application est fermée sans autre forme de procès.

On pourrait se dire, avec raison, qu’un traitemment de donnée prenant quelques secondes est plutôt rare, ce qui est vrai. En revanche, l’utilisation de MessageBox dans cette configuration est fréquente malgré le fait que la boite d’alerte ne stoppe en rien le compteur assigné à l’evenement de retour.

void photoChooserTask_Completed(object sender, PhotoResult e)
{
   MessageBox.Show("Je vais faire planter l'application si je reste trop longtemps ouverte !!!");
}

C’est une erreur tellement courante que l’exemple de MSDN sur le photoChooser comporte un MessageBox ;)

Si l’on veut tout de même afficher une boite de dialogue ou effectuer un traitement long on peut s’appuyer sur l’évenement NavigateTo de sa page qui est appelé immédiatemment après l’evenement Completed du Chooser (ou encore lancer un thread).

bool isChooser = false;

void photoChooserTask_Completed(object sender, PhotoResult e)
{
   if (e.TaskResult == TaskResult.OK)
   {
     isChooser = true;
   }
}

protected override void OnNavigatedTo(NavigationEventArgs e)
{
  if( isChooser == true )
  {
    isChooser = false;
    MessageBox.Show("Je fais ce que je veux avec mes cheveux");  
  }
}




3 réponses à Truc #5 : Les retours de Chooser sous WP

  1.  
  2.  

    Merci pour cet article, je voulais juste dire que pour la fonction override, ca n’a marche pour moi que quand j’ai precise qu’elle soit protected.

  3. Hello Soumow. Petit oubli de ma part ^^ En général lorsque j’utilise un override, VS complete tout pour moi mais pour l’article j’ai du tapé la ligne à la mano. Thanks :)

     

leave your comment