我想每隔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();
}
}
答案 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)
使用Timer
。 Timer 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();