NSTimer contre le temporisateur dans Xamarin.iOS - quand utiliser quoi?
Est là une règle lors de l'utilisation de la maternelle NSTimer
rapport à l' .NET alternatives?
- Système.De Windows.Les formulaires.Minuterie
- Système.Les minuteries.Minuterie
- Système.Le filetage.Minuterie
source d'informationauteur Krumelur
Vous devez vous connecter pour publier un commentaire.
De l'OMI, le premier règle est que chaque fois que certains types (ou les méthodes) offre dupliqué caractéristiques entre les deux .NET et de la plate-forme que vous êtes en train de travailler, vous devez tenir compte de votre long terme de la croix-plate-forme des objectifs pour votre application et que les bits de code (réutilisation).
OIE code à l'aide de
NSTimer
ne fonctionne que sur iOS et OSX. À l'aide d'un .NET minuterie fonctionne sur Windows, Android et, bien sûr, iOS et OSX.Si vous visez pour la portabilité, j'utiliserais un
.NET
de la minuterie (voir ci-dessous), sauf si vous n'avez pas d'autre choix (comme unNSTimer
argument pour un appel de méthode).Mon préféré de tous les temps de la minuterie n'est malheureusement pas indiqué dans votre question, c'est celui qui est offert par le groupe classe:
L'utilisation est très simple. Ainsi, au lieu de cette
Timer
code:Vous pouvez utiliser ceci:
ou si vous souhaitez une exécution unique:
Qui est un réel avantage, que vous n'avez pas besoin de garder la minuterie comme variable d'instance, juste pour être en mesure de
.Stop()
.Je trouve cette forme plus simple. Comme nous l'avons rejeté l'instruction goto ans (GOTO n'est pas morte. C'est sur l'île avec Elvis et Joe Dassin), il est temps de penser à nos rappels de la surutilisation.
Je suggère l'utilisation de NSTimer.
Xamarin 5.10:
et ajouter une ligne Pour démarrer la minuterie!
Arrêter après utilisation:
Je suis d'accord avec Poupou et de Stéphane, mais je voudrais aussi dire "ça dépend".
Si vous avez besoin de mettre en œuvre la minuterie dans une commune ou une partie commune .Net alternatives sont les meilleurs. Depuis que la question est à propos de Xamarin.iOS (pas de Xamarin.Android ou Xamarin.Les formes), je voudrais ajouter ce qui suit sont pas répertoriés (pour l'instant) solution qui fonctionne pour moi et c'est très simple.
Il Appelle MyMethod(); toutes les 3 secondes.
Quelques réponses vous recommandons d'utiliser .net minuteries pour la croix-plate-forme objectifs. Mais le problème est que
Timer
classe n'est pas disponible dans certains PCL profils (au moins le profil Xamarin utilise). Dans ces cas, la solution de contournement consiste à utiliserTask.Delay()
@stephane-delcroix suggéré. J'ai même créé unPclTimer
utilitaire de la classe pour cette question.MAIS...
J'ai trouvé une situation où
Task.Delay()
ne fonctionnent pas correctement sur iOS. Si vous essayez de l'utiliser dans une tâche d'arrière-plan:youll trouver que les intervalles sont endommagés (retardé), ne pas respecter l'intervalle défini sur
Task.Delay(interval)
.Dans ce scénario,
NSTimer.CreateRepeatingScheduledTimer()
fonctionne parfaitement bien.Donc je dirais: