WPF.NET la meilleure façon de déclencher un événement à chaque minute

j'ai une application qui a besoin de vérifier une table de base de données chaque minute. La table est indexée à l'Heure de la journée et donc l'application doit exécuter cette vérification chaque minute.

Quelle est la meilleure façon de le faire? Je peux créer un thread de background worker mais si je le règle pour dormir pendant 60 secondes après chaque vérification, je vais éventuellement manquer une minute en raison de la surcharge d'appeler la vérification.

est-ce que je me souviens de la minute où j'ai vérifié et puis vérifier, tous les 15 secs say et si la minute a changé effectué le contrôle alors.

ou y a-t-il une autre approche que je devrais utiliser?

j'utilise WPF, VS2008 et VB.NET

TIA,

Simon

24
demandé sur Ray Booysen 2009-01-26 13:38:38

3 réponses

le DispatchTimer est ce que vous êtes après - il suffit de définir l'intervalle que vous voulez, puis d'attacher une méthode à L'événement Tic - Tac-fonctionne une gâterie.

34
répondu MrTelly 2009-01-26 11:31:05

comme L'a dit M. Telly, le répartiteur est le moyen de le faire. Il est étroitement intégré à la file D'attente du répartiteur et s'assure que vos callbacks sont sur le bon fil. Voici quelques bons articles sur cette classe. Un exemple de code type est présenté ci-dessous:

//  DispatcherTimer setup
dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0,0,1);
dispatcherTimer.Start();

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    // Updating the Label which displays the current second
    lblSeconds.Content = DateTime.Now.Second;

    // Forcing the CommandManager to raise the RequerySuggested event
    CommandManager.InvalidateRequerySuggested();
}

Timer vs DispatcherTimer

MSDN Documentation

29
répondu Ray Booysen 2009-01-26 10:56:25

pas sûr de WPF, mais dans WinForms, il y a un contrôle de minuterie pour ça. S'il n'y en a pas, une voie est la boucle suivante:

  • Vérifier si nous avons passé la dernière minute
  • Si non, dormir pendant un court laps de temps et vérifier de nouveau
  • Faire des trucs
  • Vérifier l'heure actuelle
  • Enregistrer la minute
  • dormir pendant 60000m-heure actuelle (sec et partie ms) - certains valeur
1
répondu lc. 2009-01-26 10:50:10