65 votes

Quels sont les trucs, astuces et Gotcha-Avoiders les plus précieux du .NET Compact Framework?

Nous travaillons beaucoup dans .Net Compact Framework et Windows Mobile. J'ai vu beaucoup de questions se poser sur les spécificités du développement d'applications ASP.Net ou d'autres applications de bureau basées sur .Net, mais rien de spécifique à CF.

Quelqu'un d'autre est-il un développeur mobile capable de partager des tâches, de cesser de faire et d'éviter de le faire lors du développement dans le Compact Framework?

120voto

ctacke Points 53946

Assurez-vous:

  • L'utilisation d'un dispositif physique chaque fois que c'est possible (l'émulateur)
  • Test avec plusieurs appareils (fournisseurs différents, différents modèles)
  • Concentrer les tests autour du sommeil/réveil comportements
  • Lors de l'utilisation de MSTEST tests unitaires, ne jamais utiliser les accesseurs
  • Éviter ActiveSync comme de la peste de débogage à l'aide de CoreCon direct
  • Se familiariser avec les RPM et commencer à l'utiliser au début
  • La réutilisation d'objets lorsque cela est possible
  • Éviter de faire beaucoup de travail, un Formulaire ctor - off de le charger pour le lazy load ou dans un thread d'arrière-plan
  • Charger les Formulaires à la demande lorsque cela est possible (pas tous à la fois)
  • Cache fréquemment utilisé des Formulaires, créer des rares sur demande
  • Garder les résolutions d'image faible
  • Si une classe expose Disposer de l'utiliser. Toujours.
  • Pas d'application est trop petite pour bénéficier de MVC/MVP modèles
  • N'utilisez pas Microsoft CAB/SCSF port pour le CF (les personnes qui ont porté, c'est évidemment jamais réellement utilisé les ressources sont limitées appareil)
  • Se familiariser avec le concept de "occasionnellement" si vous faites toutes les données à distance/activité de service
  • D'amarrage et d'Ancrage sont vos amis et vos ennemis - test de l'écran en temps des rotations et des multiples résolutions (même si vous pensez que vous n'aurez pas de cible, parce que vous êtes probablement mal dans cette pensée)
  • Regardez, mais ne pas investir massivement dans l'appareil package de déploiement type de projet. Il a des limites importantes qui seront susceptibles de vous mordre. Un fichier batch fonctionne étonnamment bien ou personnalisé tâche MSBUILD pour appeler CabWiz
  • Balayer vers le haut sur votre C++ et de P/Invoke compétences. Vous aurez besoin d'eux. Il est presque impossible d'écrire une FC app sans P/Invoquant quelque chose.
  • Code au plus petit dénominateur commun pour les cibles.
  • Classes partielles sont à votre ami, surtout pour les divisant logique entre les types de cibles (PPC, Téléphone, non-mobile EC).
  • Éviter l'exécution d'une application de stockage persistant, en particulier pour CE et pré-WInMo 5. Copie de la RAM et de l'exécuter à partir de là pour éviter la demande de pagination de vous tuer, surtout après un cycle veille/sommeil.
  • Les applications doivent se soucient pas de sommeil/sillage des transitions, mais c'est de la pure théorie. Sommeil wake *va changer votre app comportement, donc de nouveau test, test, test.
  • Ai-je mentionné test? Surtout sur tous les appareils que vous pouvez obtenir vos mains sur? Acheter à bas prix du matériel hors de eBay pour votre laboratoire de tests. Ayant de plus en plus d'appareils est plus important que d'avoir la dernière, sauf si vous avez l'intention d'utiliser une fonctionnalité spécifique d'un nouveau périphérique.
  • Demandez une intervention divine si vous prévoyez d'utiliser le bluetooth de la programmation. Se familiariser avec les piles de Widcomm et Microsoft et de comprendre qu'ils ne sont pas les mêmes.
  • Regarder la MSDN) sur la gestion de la mémoire dans le Compact Framework. De le regarder à nouveau pour que les choses que vous avez manqué la première fois.
  • Watch out pour le sommeil/sillage de l'invalidation d'intérieur poignées et provoquant des violations d'accès. C'est plus ésotérique, mais certainement le cas. Par exemple, si vous utilisez un formulaire de demande à partir d'une carte de stockage, l'ensemble de l'application n'est pas chargé dans la RAM. Les morceaux sont paginée à la demande en vue de l'exécution. C'est bien beau. Maintenant, si vous mettez l'appareil hors tension, les pilotes sont tous fermés. Quand vous à nouveau de la puissance, de nombreux appareils simplement re-monter les périphériques de stockage. Lorsque votre application a besoin de la demande de page en plus du programme, il n'est plus où il était et ce qu'il meurt. Un comportement similaire peut se produire avec des bases de données sur les banques montés. Si vous avez un handle ouvert à la base de données, après un cycle veille/sommeil le handle de connexion peut ne plus être valide.
  • Installer la version d'évaluation de Platform Builder. Le code source pour un tas de choses, c'est là (comme le réseau de l'INTERFACE utilisateur, de nombreux conducteurs, etc) et lors de votre P/Invoke code n'est pas fait ce que vous attendez, vous aurez au moins avoir un endroit pour aller chercher le "pourquoi".

ajouté 5/25/10

ajouté 7/27/10

  • Si vous êtes après une esthétique de l'INTERFACE utilisateur, être prêt à faire beaucoup de la coutume ou de manuel de dessin.
  • Si vous êtes en train de faire la coutume ou manuel de dessin et vous avez besoin d'utiliser la transparence, préparez-vous pour une charge de frustrations et d'avoir à écrire loufoque code ou composez le code natif directement à contourner les lacunes dans les FC.

ajouté 11/22/11

Je suis simplement en ajoutant à la liste comme ils se produisent à moi...

13voto

Mitch Wheat Points 169614

OpenNETCF est une excellente ressource.

Leur Smart Device Framework est vraiment indispensable lors du développement avec le .NET Compact Framework, car il manque tant de fonctionnalités complètes de l’infrastructure complète [Je pense que quelqu'un a déjà dit que le .NET Compact Framework encapsulait NotImplementedException!]

11voto

Mat Nadrofsky Points 5261

Ce n'est pas spécifique à juste Compact Framework appareils, cependant, elle relève que c'est laid, la tête de beaucoup plus lors du développement sur eux en raison de contraintes de ressources en développement sur plate-forme mobile.


Récemment je suis tombé sur un grand poste dans le cadre d'une discussion sur la gestion des fuites de mémoire qui m'a aidé à identifier une fuite que je ne connaissais pas un bug lors de la configuration de la grille de données.Source de données dans l'une de nos applications mobiles.

Lors de la liaison d'un contrôle DataGrid, vous devriez ne pas directement utiliser quelque chose comme:

dgDataGrid.DataSource = dsDataSet;

Que cela crée une nouvelle CurrencyManager chaque temps qui ne passe pas bien obtenir éliminés. Au lieu de cela vous voulez lier le contrôle DataGrid à un BindingSource d'abord afin d'éviter la fuite des ressources.

bsData.DataSource = dsDataSet;

dgDataGrid.DataSource = bsData;

Qui le savait? Scott Langham a fait dans un autre post. Merci Scott!

7voto

MusiGenesis Points 49273

Si vous avez en charge plusieurs tailles d'écran/résolutions, forme l'héritage est une excellente façon de le faire. Fondamentalement, la conception de votre formulaire pour s'adapter à la norme écran 320x240. À l'appui d'une différente taille de l'écran, il suffit d'ajouter un nouveau formulaire, vous héritez de votre formulaire personnalisé (au lieu de la Forme), et puis re-organiser les contrôles nécessaires.

Une autre astuce utile est d'envelopper le ShowDialog appel d'une manière qui vous permet de régler le formulaire parent de la légende "" temporairement - ce qui les tient tous les formulaires ouverts dans votre application dans la liste des programmes en cours. Un autre moyen d'améliorer le wrapper est à PInvoke SetForegroundWindow avec le handle de la fenêtre parent. Cela garantit que le parent toujours ré-apparaissent après que l'enfant est fermé; sans cet appel, il est possible pour les autres windows pour être inséré dans la pile z au-dessus du formulaire parent.

Watch out pour le cryptage sur la carte SD. SqlCE va arrêter complètement de travailler. Oracle Lite comportement sous le chiffrement est beaucoup plus sinistre, puisque les pièces de travail et des parties de ne pas.

Éviter SqlCE de l'ANR et de la réplication de fusion. Ces serait fantastique si ils ont travaillé de façon fiable, mais ils ne sont pas dans des situations où la connexion au réseau peut être de façon inattendue a chuté au cours de la réplication (assez commun dans le WM monde). Ce un peu m'DUR avec une production de l'app. Le MS support tech nous avons traité a finalement été forcé de reconnaître qu'il n'a tout simplement pas travailler à 100%. Réelle citation: "essayez juste de garder à reproduire, ils vont fusionner correctement".

7voto

Vaccano Points 18515

Juste comme pour info, si vous êtes déçu de ne pas avoir Compact Framework prise en charge dans Visual Studio 2010, puis aller ici et de voter pour qu'il soit ajouté dans. (Et la propagation de la parole)

MS a plus ou moins abandonné existants, de demandes de fonctionnalités dans Connect. S'il vous plaît aller à la nouvelle Voix Utilisateur site pour voter pour cette fonctionnalité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X