Introduction
Dans cet article, nous allons créer une interface avec un appareil GPS qui sera intégrable dans un projet s’appuyant sur la localisation. Cette interface sera représentée par une classe GPSDevice. L’objectif est d’obtenir les données du GPS en continu :

Pour comprendre les enjeux d’un tel objectif, il faut savoir qu’un GPS est représenté au programmeur par une liaison série, quelle que soit l’interface physique par laquelle il est relié au système (Bluetooth, Compact Flash,…). Le GPS envoie des données de localisation au format NMEA, qui est du texte ASCII facilement analysable.
Tout d’abord, pour communiquer via le port série, nous aurons besoin de la technologie « Platform Invoke » pour appeler des fonctions non managées issues de l’API Win32, comme le .NET Framework ne contient pas de classe pour le faire.
Remarque : Dans les PDA de types « O2 XDA 2 » et « MDA II », il manque le support de la communication par port série. Dans ce cas, il faut installer un outil qui corrige cet oubli (ainsi que d’autres problèmes tel que la connexion automatique avec le bluetooth). Vous trouverez ce programme (gratuit) « Pocket Bluetooth Tools » sur le site http://bluetooth.i-networx.de/index_e.html .
Ensuite, nous verrons une manière élégante de combler un manque du Compact Framework dans le domaine des threads : le manque de la fonction Join(), qui permet de se synchroniser avec la fin de l’exécution d’un thread.
Pour finir, nous donnerons des pistes pour manipuler des threads et éviter des phénomènes d’interblocage qui apparaissent lorsqu’un thread d’arrière plan accède à des contrôles graphiques.