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