'C# Blazor: Countdown Timer
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;
}
}
}
Solution 1:[1]
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);
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |