如何设置定时器在c#中的特定时间执行

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)

  • 这不行.定时器不准确http://stackoverflow.com/questions/10605639/timer-component-not-accurate-enough-is-there-an-alternative它测量滴答,它们可以被高CPU使用率抵消 (2认同)
  • @Mick 它不需要是一个实时问题。大约在凌晨 1 点或凌晨 1 点,他希望有事情发生。确实,计时器可能会有轻微的延迟。但对于大多数场景来说已经足够了。对于数千个场景,您可以使用 MMTimer http://www.codeproject.com/Articles/5501/The-Multimedia-Timer-for-the-NET-Framework (2认同)

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可能很棘手.