每x分钟调用一次方法

时间:2012-10-22 20:36:21

标签: c#

我想每隔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();
    }
}

8 个答案:

答案 0 :(得分:134)

var startTimeSpan = TimeSpan.Zero;
var periodTimeSpan = TimeSpan.FromMinutes(5);

var timer = new System.Threading.Timer((e) =>
{
    MyMethod();   
}, null, startTimeSpan, periodTimeSpan);

答案 1 :(得分:52)

我的基础是@ asawyer的回答。他似乎没有得到编译错误,但我们中的一些人做了。这是Visual Studio 2010中的C#编译器将接受的版本。

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

答案 2 :(得分:3)

使用TimerTimer documentation

答案 3 :(得分:3)

在班级的构造函数中启动计时器。 间隔以毫秒为单位,因此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
}

答案 4 :(得分:3)

我已经上传了一个Nuget Package,可以让它变得如此简单,你可以从这里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.

答案 5 :(得分:2)

使用Timer

的示例
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 void your_method(object sender, ElapsedEventArgs e)
{
    Console.WriteLine("..."); 
}

答案 6 :(得分:1)

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

答案 7 :(得分:0)

使用DispatcherTimer:

 var _activeTimer = new DispatcherTimer {
   Interval = TimeSpan.FromMinutes(5)
 };
 _activeTimer.Tick += delegate (object sender, EventArgs e) { 
   YourMethod(); 
 };
 _activeTimer.Start();