Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Le DispatcherTimer et les traitements périodiques

La classe DispatcherTimer permet de déclencher des traitements périodiques (à délai régulier). Vous pouvez contrôler la périodicité du timer en fixant la propriété Interval (elle est de type TimeSpan). Vous devez ajouter votre gestionnaire d'événement à l'événement Tick. Le timer démarrera lors de l'appel de la méthode Start. Les méthodes Stop et Restart peuvent aussi être appelées.

Pour ceux qui connaissent déjà l'API WinForm, on peut dire que la classe DispatcherTimer est en quelque sorte l'équivalent du contrôle Timer WinForm. Mais contrairement à ce dernier, vous ne pouvez pas glisser/déposer un DispatcherTimer sur l'outil de conception d'interface graphique. Il faudra forcément l'utiliser par code dans la classe de « code-behind ».

Définition XAML de la fenêtre

Afin de tester cette possibilité, nous allons écrire une application permettant d'afficher une horloge digitale : il sera donc nécessaire d'actualiser l'affichage toutes les secondes. Voici la définition XAML de notre application d'horloge.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
<Window x:Class="Timer.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Horloge WPF avec un DispatcherTimer" Width="400" Height="200">
    <Grid>
        <Label x:Name="lblTime" Content="" FontSize="30"
               HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
</Window>
La définition XAML de la fenêtre

Le code C# de mise à jour de l'horloge

Et voici maintenant le code permettant la mise à jour périodique.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
using System;
using System.Windows;
using System.Windows.Threading;

namespace Timer
{
    public partial class MainWindow : Window
    {
        private DispatcherTimer timer = new DispatcherTimer();

        public MainWindow()
        {
            InitializeComponent();
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Tick += timer_Tick;
            timer.Start();
        }

        void timer_Tick(object sender, EventArgs e)
        {
            lblTime.Content = DateTime.Now.ToLongTimeString();
        }
    }
}
Le code de réactualisation de l'heure via un DispatcherTimer