C# 实现自定义任务调度器

需积分: 10 2 下载量 18 浏览量 更新于2024-09-09 收藏 8KB TXT 举报
C# 代码片段展示了如何在Windows操作系统中使用C#编程语言来创建自定义任务调度器。该代码主要关注`Microsoft.Win32.TaskScheduler`命名空间中的类,用于管理任务计划程序(Task Scheduler)。以下是对这段代码的重要知识点的详细解析: 1. 引用库:`using System;` 和 `using System.Linq;` 是为了使用基本的.NET框架功能,如LINQ查询,而 `using Microsoft.Win32.TaskScheduler;` 是直接与Windows任务调度API交互的关键部分。 2. 类结构: - `CustomTaskScheduler` 类定义了私有静态变量 `m_Task`,表示单例模式的实例,用于确保在整个应用程序中只有一个`TaskScheduler`对象。 - `GetInstance()` 方法是静态方法,返回唯一的`CustomTaskScheduler`实例。如果 `m_Task` 为空,则创建一个新的实例。 3. 常量定义: - `TIME_FORMAT` 定义了时间格式字符串,如 "HH:mm"。 - `TIME_DEFAULT` 设置了默认的运行时间,这里为 "8:00"。 - `TASK_NAME` 是任务的名称,例如执行的可执行文件名。 4. 创建任务方法:`Create(string runTime)` 方法接收一个字符串参数 `runTime`,用于设置任务的运行时间。首先检查 `runTime` 是否为空或长度不足,然后进行以下操作: - 初始化 `TaskService` 对象,这是用来与任务调度服务通信的桥梁。 - 创建一个新的 `TaskDefinition` 对象,定义任务的基本属性,如任务描述、启动条件(仅在计算机处于AC电源时启动)等。 - 设置 `TaskSettings`,包括是否允许在电池模式下启动、是否在切换到电池供电时停止以及是否唤醒计算机以运行任务。 - 使用 `DailyTrigger` 类创建一个每日触发器,每天执行一次,通过 `DaysInterval` 属性指定间隔为1天。 - 将触发器的时间边界 `StartBoundary` 设置为传递的 `runTime` 参数转换为 `DateTime` 对象,以便确定任务的具体启动时间。 5. 任务调度逻辑:这个代码片段的核心功能是创建一个定期运行的任务,当满足特定条件(如计算机在AC电源下运行)时,会在用户指定的时间执行指定的程序(在这里,是可执行文件)。 总结:这段C#代码展示了如何在Windows环境中利用C#编写任务计划程序,以实现定时执行特定任务的功能。它涉及单例设计、任务定义、触发器设置以及与Windows任务调度API的交互。这对于自动化运维、定时任务执行或创建后台服务等方面具有实用价值。