¿Cómo hacer un temporizador de cuenta atrás?

Hola, estoy escribiendo una aplicación UWP de Marcador y me gustaría saber cómo hacer el código detrás del temporizador. Debido a que es un marcador de baloncesto, tiene 2 relojes, uno solo por segundos (shotclock) y otro que maneja minutos y segundos. Entonces, me gustaría saber si hay una forma fácil de hacer este tipo de cuentas regresivas en UWP.

Acabo de encontrar esto, pero no cuenta hacia abajo:

private void stopwatch_Tapped(object sender, TappedRoutedEventArgs e) { if (_stopwatch.IsRunning) { _stopwatch.Stop(); _timer.Dispose(); } else { _stopwatch.Start(); _timer = new Timer(updateTime, null, (int)TimeSpan.FromMinutes(1).TotalMinutes, Timeout.Infinite); } } private async void updateTime(object state) { await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { stopwatchLbl.Text = String.Format("{0:00}:{1:00}:{2:00}", _stopwatch.Elapsed.TotalMinutes, _stopwatch.Elapsed.TotalSeconds, _stopwatch.Elapsed.TotalMilliseconds / 10); //stopwatchLbl.Text = "00:00:00"; } ); } 

Prueba este código, ojalá te ayude 🙂

 internal class countDownTimer { public int enlapsedTime; private DispatcherTimer dispatch; public delegate void MyCallback(); public delegate void MyCallback2(int value); public MyCallback OnStartTime; public MyCallback OnStopTime; public MyCallback OnEndTime; public MyCallback2 OnCountTime; public countDownTimer() { Debug.WriteLine("StopWatch init"); enlapsedTime = 0; dispatch = new DispatcherTimer(); dispatch.Interval = new TimeSpan(0, 0, 1); dispatch.Tick += timer_Tick; } private void timer_Tick(object sender, object e) { enlapsedTime--; Debug.WriteLine(enlapsedTime); if (OnCountTime != null) OnCountTime(enlapsedTime); if (enlapsedTime < 0) { enlapsedTime = 0; dispatch.Stop(); if (OnEndTime != null) OnEndTime(); } } public void Start() { dispatch.Start(); if (OnStartTime != null) OnStartTime(); Debug.WriteLine("iniciar contador"); } public void Stop() { dispatch.Stop(); if (OnStopTime != null) OnStopTime(); Debug.WriteLine("parar contador"); } public bool IsEnabled { get { return dispatch.IsEnabled; } } } 

Puede usar el UWPHelper.Utilities.ThreadPoolTimer de mi paquete NuGet UWPHelper . Deberá marcar la checkbox Include pre-release preliminar en NuGet Package Manager para poder descargarlo.

My ThreadPoolTimer es una clase de envoltorio para System.Threading.Timer y funciona de manera similar a DispatcherTimer sin embargo, se ejecuta en ThreadPool, no en el subproceso de la interfaz de usuario.

 using UWPHelper.Utilities; // TimeSpan indicates the interval of the timer ThreadPoolTimer timer = new ThreadPoolTimer(TimeSpan.FromSeconds(1)); timer.Tick += OnTick; void OnTick(object sender, EventArgs e) { // Method invoked on Tick - every second in this scenario } // To start the timer timer.Start(); // To stop the timer timer.Stop();