C# 我们可以创建多个动态计时器吗

C# 我们可以创建多个动态计时器吗,c#,asp.net,windows,C#,Asp.net,Windows,我需要创建一个具有多个计时器的windows服务,并且计时器编号不能贬值。需要创建将近40个计时器。这是可能的动态定时器。所需的计时器数量将从DB加载。创建动态计时器是否可取?如果是,我们可以在windows服务中创建动态计时器吗?尝试以下操作: public static class AppTimer { static AppTimer() { Events = new Dictionary<string, Event>(); }

我需要创建一个具有多个计时器的windows服务,并且计时器编号不能贬值。需要创建将近40个计时器。这是可能的动态定时器。所需的计时器数量将从DB加载。创建动态计时器是否可取?如果是,我们可以在windows服务中创建动态计时器吗?

尝试以下操作:

public static class AppTimer
{
    static AppTimer()
    {
        Events = new Dictionary<string, Event>();
    }

    public static Dictionary<string, Event> Events { get; set; }

    public static void AddEvent(string eventType, Event newEvent)
    {
        if (Events.ContainsKey(eventType))
        {
            Events[eventType].Timer.Stop();
            Events[eventType] = null;
            Events.Remove(eventType);
        }

        Events.Add(eventType, newEvent);
    }

    private static int CalculateTimerInterval(int minute)
    {
        if (minute < 0) minute = 60;

        var now = DateTime.Now;

        var future = new DateTime();

        // We want to run right away
        if (minute == 0)
        {
            future = now.AddSeconds(1.5);
        }
        else
        {
            future = now.AddMinutes((minute - (now.Minute%minute)))
                .AddSeconds(now.Second*-1)
                .AddMilliseconds(now.Millisecond*-1);
        }

        var interval = future - now;

        return (int)interval.TotalMilliseconds;
    }

    public class Event
    {
        public Event(Action tick, int interval)
        {
            this.Timer = new Timer { Interval = CalculateTimerInterval(interval) };
            this.Timer.AutoReset = false;
            this.Timer.Elapsed += (sender, args) =>
            {
                    tick?.Invoke();

                if (this.Interval > 0)
                {
                    this.Timer.Interval = CalculateTimerInterval(this.Interval);
                }
            };
            this.Interval = interval;
            this.Timer.Start();
        }

        public Timer Timer { get; set; }

        public int Interval { get; set; }

        public void ChangeInterval(int newInterval)
        {
            this.Interval = newInterval;
            this.Timer.Interval = CalculateTimerInterval(newInterval);
        }
    }
}

仅供参考,VS 2015和C 6尚未公开发布,因此使用?。接线员不完全是犹太教徒。
AppTimer.AddEvent("My Task #1", new AppTimer.Event(()=> { Console.WriteLine("Event Fired"); }, 1));