una temporizador reversa regresivo regresiva hacer cuenta cronometro contador consola como c# .net visual-studio uwp uwp-xaml

c# - reversa - ¿Cómo hacer un temporizador de cuenta regresiva?



timer c# cronometro (2)

prueba este código, ojalá eso 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; } } }

Hola, estoy escribiendo una aplicación Scoreboard UWP y me gustaría saber cómo crear 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 administra minutos y segundos. Entonces, me gustaría saber si hay una manera fácil de hacer este tipo de cuenta atrás en UWP.

Acabo de encontrar esto, pero cuenta hacia arriba, no 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"; } ); }


Puede usar UWPHelper.Utilities.ThreadPoolTimer desde mi paquete NuGet UWPHelper . Deberá marcar la casilla de verificación Include pre-release en NuGet Package Manager para poder descargarlo.

My ThreadPoolTimer es una clase contenedora para System.Threading.Timer y funciona de manera similar al DispatcherTimer pero funciona en ThreadPool, no en el subproceso UI.

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();