我正在尝试使用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();
}
}
}
}