C#實現(xiàn)定時任務Task Scheduler的示例代碼
本文和大家分享一個自己寫的 Windows 定時任務計劃(Task Scheduler) 動態(tài)創(chuàng)建代碼,沒做太多封裝,留個實現(xiàn)筆記
首先封裝一個簡單配置項的類
核心代碼
public class TaskSchedulerConfig { /// <summary> /// 引用程序路徑 /// </summary> public string ApplicationPath { get; set; } /// <summary> /// 引用程序參數(shù) /// </summary> //public string ApplicationParameter { get; set; } /// <summary> /// 任務名稱 /// </summary> public string TaskName { get; set; } /// <summary> /// 任務說明 /// </summary> public string TaskDescription { get; set; } /// <summary> /// 任務執(zhí)行周期 0 每日執(zhí)行 1 每周執(zhí)行 2 每月執(zhí)行 /// </summary> public int TaskExecutionCycle { get; set; } /// <summary> /// 開始執(zhí)行時間范圍 yyyy/MM/dd HH:mm:ss /// </summary> public DateTime StartBoundary { get; set; } /// <summary> /// 每月的第幾號執(zhí)行 /// </summary> public int DaysOfMonth { get; set; } /// <summary> /// 每周的周幾執(zhí)行 /// </summary> public int DaysOfWeek { get; set; } }
兩個范圍判定的方法
/// <summary> /// 根據(jù)數(shù)字1-7來設(shè)置周一 - 周日 /// </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("無效的數(shù)字。請?zhí)峁?到7之間的數(shù)字。"); } } /// <summary> /// 限定每月只能在1-28號之間執(zhí)行任務 /// </summary> /// <param name="num"></param> /// <returns></returns> static int GetDaysOfMonth(int num) { if (num < 1 || num > 28) { throw new ArgumentException("無效的數(shù)字。請?zhí)峁?到28之間的數(shù)字。"); } 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($"參數(shù)錯誤,正確示例:{demo}"); return; } try { using (TaskService taskService = new TaskService()) { // 創(chuàng)建一個新任務 TaskDefinition taskDefinition = taskService.NewTask(); taskDefinition.Principal.UserId = "SYSTEM"; // 設(shè)置為SYSTEM以在系統(tǒng)級別運行 // 設(shè)置任務的基本信息 taskDefinition.RegistrationInfo.Description = taskSchedulerConfig.TaskDescription; switch (taskSchedulerConfig.TaskExecutionCycle) { case 0: DailyTrigger dailyTrigger = new DailyTrigger(); dailyTrigger.StartBoundary = taskSchedulerConfig.StartBoundary; dailyTrigger.DaysInterval = 1; // 每天執(zhí)行 taskDefinition.Triggers.Add(dailyTrigger); break; case 1: WeeklyTrigger weeklyTrigger = new WeeklyTrigger(); weeklyTrigger.StartBoundary = taskSchedulerConfig.StartBoundary; weeklyTrigger.DaysOfWeek = GetDaysOfTheWeek(taskSchedulerConfig.DaysOfWeek); weeklyTrigger.WeeksInterval = 1; // 每隔1周執(zhí)行 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; // 每個月執(zhí)行 taskDefinition.Triggers.Add(monthlyTrigger); break; default: Console.WriteLine("任務執(zhí)行周期參數(shù)錯誤!正確示例:0 每日執(zhí)行 1 每周執(zhí)行 2 每月執(zhí)行"); break; } // 設(shè)置要執(zhí)行的程序路徑 taskDefinition.Actions.Add(new ExecAction(taskSchedulerConfig.ApplicationPath, null, null)); // 將任務注冊到 Windows 任務計劃程序 taskService.RootFolder.RegisterTaskDefinition(taskSchedulerConfig.TaskName, taskDefinition); Console.WriteLine("任務計劃創(chuàng)建成功!"); } } catch (Exception ex) { Console.WriteLine($"創(chuàng)建{taskSchedulerConfig.TaskName} 任務錯誤,錯誤原因是:{ex.Message}"); } }
到此這篇關(guān)于C#實現(xiàn)定時任務Task Scheduler的示例代碼的文章就介紹到這了,更多相關(guān)C#定時任務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實現(xiàn)輸入10個數(shù)存入到數(shù)組中并求max和min及平均數(shù)的方法示例
這篇文章主要介紹了C#實現(xiàn)輸入10個數(shù)存入到數(shù)組中并求max和min及平均數(shù)的方法,涉及C#簡單數(shù)據(jù)轉(zhuǎn)換與數(shù)值運算相關(guān)操作技巧,需要的朋友可以參考下2017-07-07C# 文件操作函數(shù) 創(chuàng)建文件 判斷存在
本文列舉了C#中文件操作中常用的函數(shù),創(chuàng)建文件和判斷文件存不存在的基本使用,簡單實用,希望能幫到大家。2016-05-05c#斐波那契數(shù)列(Fibonacci)(遞歸,非遞歸)實現(xiàn)代碼
c#斐波那契數(shù)列(Fibonacci)(遞歸,非遞歸)實現(xiàn)代碼,需要的朋友可以參考一下2013-05-05C# Distinct和重寫IEqualityComparer時要知道的二三事
這篇文章主要給大家介紹了關(guān)于C# Distinct和重寫IEqualityComparer時要知道的二三事,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06