Ответ 1
var startTimeSpan = TimeSpan.Zero;
var periodTimeSpan = TimeSpan.FromMinutes(5);
var timer = new System.Threading.Timer((e) =>
{
MyMethod();
}, null, startTimeSpan, periodTimeSpan);
Я хочу называть какой-то метод каждые 5 минут. Как я могу это сделать?
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("*** calling MyMethod *** ");
Console.ReadLine();
}
private MyMethod()
{
Console.WriteLine("*** Method is executed at {0} ***", DateTime.Now);
Console.ReadLine();
}
}
var startTimeSpan = TimeSpan.Zero;
var periodTimeSpan = TimeSpan.FromMinutes(5);
var timer = new System.Threading.Timer((e) =>
{
MyMethod();
}, null, startTimeSpan, periodTimeSpan);
Я основывался на этом ответе @asawyer. Кажется, у него не получается ошибка компиляции, но некоторые из нас это делают. Вот версия, которую примет компилятор С# в Visual Studio 2010.
var timer = new System.Threading.Timer(
e => MyMethod(),
null,
TimeSpan.Zero,
TimeSpan.FromMinutes(5));
Используйте Timer
. Документация по таймеру.
while (true)
{
Thread.Sleep(60 * 5 * 1000);
Console.WriteLine("*** calling MyMethod *** ");
MyMethod();
}
Запустите таймер в конструкторе вашего класса. Интервал составляет миллисекунды, поэтому 5 * 60 секунд = 300 секунд = 300000 миллисекунд.
static void Main(string[] args)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 300000;
timer.Elapsed += timer_Elapsed;
timer.Start();
}
Затем вызовите GetData()
в событии timer_Elapsed
следующим образом:
static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//YourCode
}
Пример использования таймера
using system.timers;
static void Main(string[] args)()
{
Timer t = new Timer(TimeSpan.FromMinutes(5).TotalMilliseconds); // set the time (5 min in this case)
t.AutoReset = true;
t.Elapsed += new System.Timers.ElapsedEventHandler(your_method);
t.Start();
}
// this method calls every 5 min
private void your_method(object sender, ElapsedEventArgs e)
{
Console.WriteLine("...");
}
Я загрузил пакет Nuget, который может сделать его настолько простым, вы можете получить его здесь CrystalJobScheduler
И вот, как начать использовать его
using CrystalJobScheduler;
var jobScheduler = new JobScheduler(TimeSpan.FromMinutes(8), new Action(() => {
//What you want to execute
}));
jobScheduler.Start(); // To Start up the Scheduler
jobScheduler.Stop(); // To Stop Scheduler from Running.