Files
mapo-iob-man/IOB-MAN.Core/Services/SchedulerService.cs
T
2025-06-17 09:15:06 +02:00

63 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IOB_MAN.Core.Services
{
/// <summary>
/// Classe di gestione Scheduler scadenziabili
///
/// rif https://codinginfinite.com/creating-scheduler-task-seconds-minutes-hours-days/
/// </summary>
public class SchedulerService
{
#region Public Properties
public static SchedulerService Instance => _instance ?? (_instance = new SchedulerService());
#endregion Public Properties
#region Public Methods
public void ScheduleTask(int hour, int min, double intervalInHour, Action task)
{
DateTime now = DateTime.Now;
DateTime firstRun = new DateTime(now.Year, now.Month, now.Day, hour, min, 0, 0);
if (now > firstRun)
{
firstRun = firstRun.AddDays(1);
}
TimeSpan timeToGo = firstRun - now;
if (timeToGo <= TimeSpan.Zero)
{
timeToGo = TimeSpan.Zero;
}
var timer = new Timer(x =>
{
task.Invoke();
}, null, timeToGo, TimeSpan.FromHours(intervalInHour));
timers.Add(timer);
}
#endregion Public Methods
#region Private Fields
private static SchedulerService _instance = new SchedulerService();
private List<Timer> timers = new List<Timer>();
#endregion Private Fields
#region Private Constructors
private SchedulerService()
{ }
#endregion Private Constructors
}
}