3 votes

C# WPF timer (chronomètre) avec DispatcherTimer

J'essaie de faire un chronomètre simple mais cela ne fonctionne pas. L'application se bloque lorsque j'appuie sur les boutons. Quel est le problème ?

public partial class MainWindow : Window
{
    private DispatcherTimer timer;

    public MainWindow()
    {
        InitializeComponent();
        DispatcherTimer timer = new DispatcherTimer(new TimeSpan(0, 0, 0, 0, 1), DispatcherPriority.Normal, delegate
        {
            this.Show.Text = DateTime.Now.ToString("HH:mm:ss:fff");
        }, this.Dispatcher);
    }

    private void Start(object sender, RoutedEventArgs e)
    {
        timer.Start();
    }

    private void Stop(object sender, RoutedEventArgs e)
    {
            timer.Stop();
    }
}

4voto

slugster Points 27178

Votre problème est le suivant :

DispatcherTimer timer = ...

vous avez créé une nouvelle instance de la minuterie qui est rattachée à votre constructeur. Vous n'avez pas défini la variable membre timer . Cela signifie que lorsque vous appuyez sur le bouton de démarrage, vous essayez de lancer un minuteur qui n'a pas encore été instancié et vous obtenez une NullReferenceException. Je vous suggère :

  • renommer la variable membre timer a _timer . Cela permet d'éviter toute confusion avec des variables locales de même nom.
  • changer la ligne DispatcherTimer timer = new DispatcherTimer a _timer = new DispatcherTimer(...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X