dmeo040225/TimeService.cs
2025-02-11 18:01:42 +03:00

46 lines
1.2 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using Avalonia.Threading;
namespace dmeo040225.Services;
public class TimerService
{
private TimeSpan _timeRemaining = TimeSpan.FromMinutes(20);
private CancellationTokenSource _cts = new();
public event Action<TimeSpan>? TimeUpdated;
public event Action? TimerExpired;
private static TimerService? _instance;
public static TimerService Instance => _instance ??= new TimerService();
private TimerService() { }
public void Start()
{
_cts.Cancel();
_cts = new CancellationTokenSource();
Task.Run(async () =>
{
while (_timeRemaining > TimeSpan.Zero)
{
await Task.Delay(TimeSpan.FromSeconds(1), _cts.Token);
_timeRemaining -= TimeSpan.FromSeconds(1);
Dispatcher.UIThread.Post(() => TimeUpdated?.Invoke(_timeRemaining));
}
Dispatcher.UIThread.Post(() => TimerExpired?.Invoke());
}, _cts.Token);
}
public void Reset()
{
_timeRemaining = TimeSpan.FromMinutes(20);
}
public void Stop()
{
_cts.Cancel();
}
}