[c#] x 분마다 메서드 호출

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의 C # 컴파일러가 허용하는 버전입니다.

var timer = new System.Threading.Timer(
    e => MyMethod(),
    null,
    TimeSpan.Zero,
    TimeSpan.FromMinutes(5));


답변

클래스 생성자에서 타이머를 시작합니다. 간격은 밀리 초 단위이므로 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
}


답변

간단하게 만들 수있는 Nuget 패키지를 업로드했습니다. 여기에서 얻을 수 있습니다. ActionScheduler

.NET Standard 2.0을 지원합니다.

그리고 사용을 시작하는 방법

using ActionScheduler;

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.


답변

사용 예 Timer:

using System;
using System.Timers;

static void Main(string[] args)
{
    Timer t = new Timer(TimeSpan.FromMinutes(5).TotalMilliseconds); // Set the time (5 mins in this case)
    t.AutoReset = true;
    t.Elapsed += new System.Timers.ElapsedEventHandler(your_method);
    t.Start();
}

// This method is called every 5 mins
private static void your_method(object sender, ElapsedEventArgs e)
{
    Console.WriteLine("...");
}


답변

를 사용합니다 Timer. 타이머 문서 .


답변

while (true)
{
    Thread.Sleep(60 * 5 * 1000);
    Console.WriteLine("*** calling MyMethod *** ");
    MyMethod();
}