Question

J'ai une fonction d'horloge dans un programme VB.NET qui affiche l'heure, y compris les secondes. J'ai actuellement une minuterie qui interroge constamment en utilisant NOW. Je dois souvent interroger l'horloge système car la deuxième mise à jour doit être synchronisée avec l'horloge système.

Existe-t-il un accès plus direct au temps uniquement lorsque les secondes changent?

Existe-t-il un moyen plus efficace d'écrire ce code?

Si vous avez besoin de plus d'informations, faites-le-moi savoir.

Était-ce utile?

La solution

Pourquoi ne pas utiliser le composant timer? Cela suppose que vous utilisez une interface graphique et non un service.

Vous pouvez appeler une routine de synchronisation qui effectue l'interrogation pour que le temporisateur se rapproche du nombre de secondes, puis déléguer ce dernier. Vous pouvez appeler la routine de synchronisation une fois par minute environ pour vous assurer de ne pas avoir de dérive du système d'exploitation.

Cela étant dit, je suis sûr qu'il existe un moyen de détecter l'événement qui change en quelques secondes, je ne sais tout simplement pas comment le faire.

Mise à jour:

Ce lien a une implémentation similaire à celle que j'avais envisagée. Il suffit de le modifier pour que vous ne soyez pas coincé dans une boucle permanente et le tour est joué! Vous avez votre routine de synchronisation.

Mise à jour 2:

D'après les commentaires de Shog9, je pense que cette approche pourrait être meilleure que les sondages:

Public Class Form1
   Private WithEvents clockTimer As New Timer
   Private currentTime As DateTime = DateTime.MinValue

   Private Sub ClockTick(ByVal sender As Object, _
      ByVal e As System.EventArgs) Handles clockTimer.Tick

      UpdateTimer()
      DisplayTimer()
   End Sub

   Private Sub UpdateTimer()
      currentTime = DateTime.Now

      clockTimer.Stop()
      clockTimer.Interval = 1000 - currentTime.Millisecond
      clockTimer.Start()
   End Sub

   Private Sub DisplayTimer()
      lblTime.Text = currentTime.ToString("T")
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MyBase.Load

      UpdateTimer()
      DisplayTimer()
   End Sub
End Class

Maintenant, sur la base de mes tests préliminaires, il y a une sorte de dérive avec chaque événement Tick. Sur ma machine, cela variait entre 12 et 20 millisecondes. Si quelqu'un a une idée sur la façon de corriger la dérive de manière fiable, cela m'intéresserait d'apprendre.

Autres conseils

Utilisez un objet Minuteur, définissez son "intervalle". à 0, définissez cette option "activée" " à vrai. Cela se déclenchera environ toutes les 15 millisecondes (en fonction de votre configuration matérielle). Dans cette méthode, définissez MyLabel.Text = DateTime.Now.ToString () (ou ce que vous faites).

C'est parfaitement performant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top