Adi*_*Adi 9 c# multithreading timer
我有一个要求,我需要在每天00:01:00 AM执行计时器...但我没有得到如何实现这一点..如果我正在采取系统时间,它可以是不同的格式..这里是我的计时器代码..
static System.Timers.Timer timer;
timer = new System.Timers.Timer();
timer.Interval = 1000 * 60 * 60 * 24;//set interval of one day
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
start_timer();
static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
// Add timer code here
}
private static void start_timer()
{
timer.Start();
}
Run Code Online (Sandbox Code Playgroud)
Nic*_*ico 24
如果你想在00:01:00准时启动一个计时器做一些处理时间,然后重新启动计时器,你只需要计算Now和下一个00:01:00 am时间段之间的差异,如.
static Timer timer;
static void Main(string[] args)
{
setup_Timer();
}
static void setup_Timer()
{
DateTime nowTime = DateTime.Now;
DateTime oneAmTime = new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, 0, 1, 0, 0);
if (nowTime > oneAmTime)
oneAmTime = oneAmTime.AddDays(1);
double tickTime = (oneAmTime - nowTime).TotalMilliseconds;
timer = new Timer(tickTime);
timer.Elapsed += timer_Elapsed;
timer.Start();
}
static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
timer.Stop();
//process code..
setup_Timer();
}
Run Code Online (Sandbox Code Playgroud)
Gra*_*ICA 10
你应该做的是编写你的程序,做你需要做的任何事情,然后使用你的操作系统的内置任务调度程序来启动它.那是最可靠的.例如,Windows的任务计划程序可以在用户登录之前启动您的应用程序,在必要时处理重新启动应用程序,记录错误并发送通知等.
否则,您必须每周7天,每天24小时运行您的应用程序,并定期轮询该时间.
例如,您可以每分钟更改一次间隔:
timer.Interval = 1000 * 60;
Run Code Online (Sandbox Code Playgroud)
在您的Elapsed活动中,检查当前时间:
static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
if (DateTime.Now.Hour == 1 && DateTime.Now.Minute == 0)
{
// do whatever
}
}
Run Code Online (Sandbox Code Playgroud)
但这真的不可靠.您的应用可能会崩溃.处理DateTime可能很棘手.