Dans mon application Windows 8, je souhaite afficher l'heure actuelle dans un élément TextBlock. La valeur de temps devrait être mise à jour toutes les secondes. Le code suivant fonctionne bien, mais je pense que ce n'est pas exactement la solution idéale. Alors, y a-t-il une meilleure façon de faire cela?Comment lier DateTime.Now à TextBlock?
public class Clock : Common.BindableBase {
private string _time;
public string Time {
get { return _time; }
set { SetProperty<string>(ref _time, value); }
}
}
private void startPeriodicTimer() {
if (PeriodicTimer == null) {
TimeSpan period = TimeSpan.FromSeconds(1);
PeriodicTimer = ThreadPoolTimer.CreatePeriodicTimer((source) => {
Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() => {
DateTime time = DateTime.Now;
clock.Time = string.Format("{0:HH:mm:ss tt}", time);
[...]
});
}, period);
}
}
Dans la méthode LoadState:
clock = new Clock();
clock.Time = string.Format("{0:HH:mm:ss tt}", DateTime.Now);
currentTime.DataContext = clock;
startPeriodicTimer();
Utilisez une minuterie ..... –
Vous devriez interroger plus souvent. Si vous le faites une fois par seconde, vous pouvez constater que l'horloge semble bégayer ou sauter. En raison de la précision de l'horloge et des problèmes de synchronisation du processeur, "une fois par seconde" n'est pas garanti pour fonctionner à * exactement * 1 seconde d'intervalle. Il se peut qu'il soit à quelques millisecondes de distance dans les deux sens. Réglez donc une valeur de 500 ms et cela sera beaucoup plus fluide. –