Dans cet aperçu nous verrons s’il est possible de facilement convertir une application Windows 7 Desktop (avec des composants Windows Form) réalisé en .NET 4.0.

L’application que j’ai convertie dans ce document réalise différentes connexions sur des sites internet gérant des albums photos. L’application affiche des textes ainsi que des mosaïques d’images.

Un usercontrol avait été réalisé pour afficher des mosaïques de photos + légendes.

 

Accès aux données provenant d’internet

Dans le framework .NET Desktop, HttpWebResponse est beaucoup plus complet que dans sa version épurée « Windows RT ».

Heureusement une classe alternative a été créée par Microsoft : HttpClient.

Exemple d’une utilisation C# avec le framework Desktop (donc non compatible Windows RT):

HttpWebRequest reqGetLink = (HttpWebRequest)WebRequest.Create(url);
reqGetLink.Method = "GET";
reqGetLink.UserAgent = userAgent;
reqGetLink.Proxy = null;

HttpWebResponse respGetLink = (HttpWebResponse)reqGetLink.GetResponse();

HttpStatusCode statusCode = respGetLink.StatusCode;
return statusCode == HttpStatusCode.OK ? true : false;

Version Windows RT avec HttpClient:

using (HttpClientHandler handler = new HttpClientHandler())
{
   using (HttpClient reqClient = new HttpClient())
   {
      using (HttpRequestMessage reqGetLink = new HttpRequestMessage(HttpMethod.Get, url))
      {
         reqGetLink.Headers.Add("User-Agent", userAgent);
         HttpResponseMessage respGetLink = await reqClient.SendAsync(reqGetLink);

         return respGetLink.StatusCode == HttpStatusCode.OK ? true : false;
      }
   }
}

Il y a une différence très importante entre les deux versions, hormis le fait que l’on utilise HttpClient au lieu de HttWebRequest: « await« .

Le mot clé await dans une méthode async permet d’attendre le callback avant d’exécuter les traitements suivant. « Attendre ?! », non pas réellement « attendre », mais tout simplement sortir de la méthode, et continuer les actions qui n’ont pas besoin d’attendre un événement. Lorsque le callback arrivera, le programme continuera sont traitement où nous avons mis notre mot clé « await ». Magique n’est-ce pas ?

Qu’est-ce que cela implique réellement pour « nous » programmeur (ou utilisateur): que nous n’avons plus à nous préoccuper de devoir créer un nième thread pour ne pas bloquer l’affichage de notre application ! Et ça, c’est vraiment plaisant.