当前位置: 代码网 > it编程>编程语言>C# > C#实现定时任务Task Scheduler的示例代码

C#实现定时任务Task Scheduler的示例代码

2024年05月19日 C# 我要评论
本文和大家分享一个自己写的windows 定时任务计划(task scheduler) 动态创建代码,没做太多封装,留个实现笔记首先封装一个简单配置项的类核心代码public class tasksc

本文和大家分享一个自己写的 windows 定时任务计划(task scheduler) 动态创建代码,没做太多封装,留个实现笔记

首先封装一个简单配置项的类

核心代码

public class taskschedulerconfig
{
    /// <summary>
    /// 引用程序路径
    /// </summary>
    public string applicationpath { get; set; }
    /// <summary>
    /// 引用程序参数
    /// </summary>
    //public string applicationparameter { get; set; }
    /// <summary>
    /// 任务名称
    /// </summary>
    public string taskname { get; set; }
    /// <summary>
    /// 任务说明
    /// </summary>
    public string taskdescription { get; set; }
    /// <summary>
    /// 任务执行周期 0 每日执行 1 每周执行 2 每月执行
    /// </summary>
    public int taskexecutioncycle { get; set; }
    /// <summary>
    /// 开始执行时间范围 yyyy/mm/dd hh:mm:ss
    /// </summary>
    public datetime startboundary { get; set; }
    /// <summary>
    /// 每月的第几号执行
    /// </summary>
    public int daysofmonth { get; set; }
    /// <summary>
    /// 每周的周几执行
    /// </summary>
    public int daysofweek { get; set; }


}

两个范围判定的方法

 /// <summary>
          /// 根据数字1-7来设置周一 - 周日
          /// </summary>
          /// <param name="num"></param>
          /// <returns></returns>
          static daysoftheweek getdaysoftheweek(int num)
          {
              switch (num)
              {
                 case 1:
                     return daysoftheweek.monday;
                 case 2:
                     return daysoftheweek.tuesday;
                 case 3:
                     return daysoftheweek.wednesday;
                 case 4:
                     return daysoftheweek.thursday;
                 case 5:
                     return daysoftheweek.friday;
                 case 6:
                     return daysoftheweek.saturday;
                 case 7:
                     return daysoftheweek.sunday;
                 default:
                     throw new argumentexception("无效的数字。请提供1到7之间的数字。");
             }
         }
         /// <summary>
         /// 限定每月只能在1-28号之间执行任务
         /// </summary>
         /// <param name="num"></param>
         /// <returns></returns>
         static int getdaysofmonth(int num)
         {
             if (num < 1 || num > 28)
             {
                 throw new argumentexception("无效的数字。请提供1到28之间的数字。");
             }
             return num;
         }

main

 static void main(string[] args)
          {           
  
              taskschedulerconfig taskschedulerconfig;
              try
              {
                  var taskschedulerconfigjson = args[0];
                  taskschedulerconfig = jsonconvert.deserializeobject<taskschedulerconfig>(taskschedulerconfigjson);
              }
             catch
             {
                 string demo = @"{
                           ""applicationpath"": ""c:\\yourapplication\\yourexecutable.exe"",
                           ""taskname"": ""dailytask"",
                           ""taskdescription"": ""this is a daily task"",
                           ""taskexecutioncycle"": 0,
                           ""startboundary"": ""2024/02/28 08:00:00"",
                           ""daysofmonth"": 28,
                           ""daysofweek"": 3
                        }";
 
                 console.writeline($"参数错误,正确示例:{demo}");
                 return;
             }
 
 
             try
             {
                 using (taskservice taskservice = new taskservice())
                 {
                     // 创建一个新任务
                     taskdefinition taskdefinition = taskservice.newtask();
                     taskdefinition.principal.userid = "system"; // 设置为system以在系统级别运行
                     // 设置任务的基本信息
                     taskdefinition.registrationinfo.description = taskschedulerconfig.taskdescription;
 
                     switch (taskschedulerconfig.taskexecutioncycle)
                     {
                         case 0:
                             dailytrigger dailytrigger = new dailytrigger();
                             dailytrigger.startboundary = taskschedulerconfig.startboundary;
                             dailytrigger.daysinterval = 1; // 每天执行
                             taskdefinition.triggers.add(dailytrigger);
                             break;
                         case 1:
                             weeklytrigger weeklytrigger = new weeklytrigger();
                             weeklytrigger.startboundary = taskschedulerconfig.startboundary;
                             weeklytrigger.daysofweek = getdaysoftheweek(taskschedulerconfig.daysofweek);
                             weeklytrigger.weeksinterval = 1; // 每隔1周执行
                             taskdefinition.triggers.add(weeklytrigger);
                             break;
                         case 2:
                             monthlytrigger monthlytrigger = new monthlytrigger();
                             monthlytrigger.startboundary = taskschedulerconfig.startboundary;
                             monthlytrigger.daysofmonth = new[] { getdaysofmonth(taskschedulerconfig.daysofmonth) };
                             monthlytrigger.monthsofyear = monthsoftheyear.allmonths; // 每个月执行
                             taskdefinition.triggers.add(monthlytrigger);
                             break;
                         default:
                             console.writeline("任务执行周期参数错误!正确示例:0 每日执行 1 每周执行 2 每月执行");
                             break;
                     }
 
 
 
                     // 设置要执行的程序路径
                     taskdefinition.actions.add(new execaction(taskschedulerconfig.applicationpath, null, null));
 
                     // 将任务注册到 windows 任务计划程序
                     taskservice.rootfolder.registertaskdefinition(taskschedulerconfig.taskname, taskdefinition);
                     console.writeline("任务计划创建成功!");
                 }
             }
             catch (exception ex)
             {
                 console.writeline($"创建{taskschedulerconfig.taskname} 任务错误,错误原因是:{ex.message}");
             }
 
            
         }

到此这篇关于c#实现定时任务task scheduler的示例代码的文章就介绍到这了,更多相关c#定时任务内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com