I'm new to C# and trying to create a simple countdown timer using System.Timer.Timers
. It didn't work as expected and I searched the internet for a solution but it didn't really fix my problem. What I want is when the user clicks the start button, it begins and displays the countdown. But although the timer kinda worked, it didn't continuously display the timer when I clicked the button once, instead, I need to click the start button many times to see the countdown number or the timer display will not change. Here's the code.
@page "/"
<h1>Timer</h1>
<p>@counter</p>
<button @onclick="StartTimer">Start</button>
@code {
private static System.Timers.Timer aTimer;
private int counter = 60;
public void StartTimer()
{
aTimer = new System.Timers.Timer(1000);
aTimer.Elapsed += CountDownTimer;
aTimer.Enabled = true;
}
public void CountDownTimer(Object source, System.Timers.ElapsedEventArgs e)
{
if (counter > 0)
{
counter -= 1;
}
else
{
aTimer.Enabled = false;
}
}
}
Call StateHasChanged()
when updating the counter so that the UI elements are updated.
Because your callback will run on a separate thread you will need to use InvokeAsync to call StateHasChanged().
public void CountDownTimer(Object source, ElapsedEventArgs e)
{
if (counter > 0)
{
counter -= 1;
}
else
{
aTimer.Enabled = false;
}
InvokeAsync(StateHasChanged);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With