没有ReadKey的计时器类,以便程序完成计划

时间:2019-06-07 15:34:55

标签: c# timer .net-core

我正在尝试使用Timer类进行重复的方法调用。

如果我的主机中有ReadKey,我可以根据需要运行它。我想知道为什么会这样,是否有解决方法或更好的方法来做到这一点。

我确实希望我的程序在计划的工作完成后退出。

我的整个测试程序如下:

using System;
using System.Threading;

namespace TestProgram
{
    public class Program
    {
        static void Main(string[] args)
        {
            int periodInSeconds = 3;
            double durationInMinutes = 0.5;

            var scheduler = new ActionScheduler(periodInSeconds, durationInMinutes, Work);
            scheduler.Run();

            Console.ReadKey();
        }

        static void Work()
        {
            Console.WriteLine(DateTime.Now + ": Doing work...");
        }

        private class ActionScheduler
        {
            private Timer Timer;
            private DateTime StopTime;
            private int PeriodInSeconds { get; set; }
            private double DurationInMinutes { get; set; }
            private Action Action { get; set; }

            public ActionScheduler(int periodInSeconds, double durationInMinutes, Action method)
            {
                PeriodInSeconds = periodInSeconds;
                DurationInMinutes = durationInMinutes;
                Action = method;
            }

            public void Run()
            {
                StopTime = DateTime.Now.AddMinutes(DurationInMinutes);
                Timer = new Timer(TimerCallback, null, 0, PeriodInSeconds * 1000);
            }

            private void TimerCallback(object state)
            {
                if (DateTime.Now >= StopTime)
                {
                    Timer.Dispose();
                }

                Action();
            }
        }

    }
}

0 个答案:

没有答案