为了账号安全,请及时绑定邮箱和手机立即绑定

我如何安排C#Windows服务每天执行一项任务?

我如何安排C#Windows服务每天执行一项任务?

C#
慕村225694 2019-08-01 17:30:20
我如何安排C#Windows服务每天执行一项任务?我有一个用C#(.NET 1.1)编写的服务,并希望它在每晚的午夜执行一些清理操作。我必须保留服务中包含的所有代码,那么最简单的方法是什么?使用Thread.Sleep()和检查滚动的时间?
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

我实现这一目标的方法是使用计时器。

运行服务器计时器,让它每60秒检查一次/小时。

如果它是正确的小时/分钟,那么运行您的过程。

实际上,我把它抽象为一个我称之为OnceADayRunner的基类。

让我清理一下代码,我会在这里发布。

    private void OnceADayRunnerTimer_Elapsed(object sender, ElapsedEventArgs e)
    {
        using (NDC.Push(GetType().Name))
        {
            try
            {
                log.DebugFormat("Checking if it's time to process at: {0}", e.SignalTime);
                log.DebugFormat("IsTestMode: {0}", IsTestMode);

                if ((e.SignalTime.Minute == MinuteToCheck && e.SignalTime.Hour == HourToCheck) || IsTestMode)
                {
                    log.InfoFormat("Processing at: Hour = {0} - Minute = {1}", e.SignalTime.Hour, e.SignalTime.Minute);
                    OnceADayTimer.Enabled = false;
                    OnceADayMethod();
                    OnceADayTimer.Enabled = true;

                    IsTestMode = false;
                }
                else
                {
                    log.DebugFormat("Not correct time at: Hour = {0} - Minute = {1}", e.SignalTime.Hour, e.SignalTime.Minute);
                }
            }
            catch (Exception ex)
            {
                OnceADayTimer.Enabled = true;
                log.Error(ex.ToString());
            }

            OnceADayTimer.Start();
        }
    }

该方法的优点在于.SignalTime.Minute / Hour检查。

那里有用于测试等的钩子,但是这就是你的经过时间计时器看起来像什么才能使它全部工作。


查看完整回答
反对 回复 2019-08-01
  • 3 回答
  • 0 关注
  • 1508 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信