C#操作计划任务

    昨天有一个任务,就是要下载相关文件,然后保存在相关路径下,这个没什么难度,所以就略过不谈,主要谈谈定时下载,即每天某个固定时间执行下载,这个功能我是用C#代码来操作windows自带的任务计划来实现的,所以我简单的写了一个任务计划操作类,以下是代码主体部分,基本上可实现我需要的功能,当然,因为时间仓促,还不是很完善,我会尽量抽时间完善这个公共类,以便以后操作的时候,可以直接使用,废话说完,开始进入正题:

1,首先下载TaskScheduler.dll,然后将其添加到引用中。

2,然后下面是TaskSchedulerHandler.cs的代码,也就是满足我的需要的操作类

[csharp] view plain copy
 
  1. /// <summary>  
  2. /// @Date:12/10/2012  
  3. /// @Author:Andy  
  4. /// @Desciption:class of add,delete and select Task Scheduler  
  5. /// </summary>  
  6. public class TaskSchedulerHandler  
  7. {  
  8.     public string hour;//task hour  
  9.     public string minute;//task minute  
  10.     public string interval;//task interval  
  11.     public string taskName;//Name of Task  
  12.     public string userName;//user to authorize the task  
  13.     public string userPwd;//password of user  
  14.   
  15.     public TaskSchedulerHandler()  
  16.     {  
  17.         InitVariables();  
  18.     }  
  19.   
  20.     /// <summary>  
  21.     /// Add Task to TaskScheduler  
  22.     /// </summary>  
  23.     public void AddTask()  
  24.     {  
  25.         if (!SelTask())  
  26.         {  
  27.             ScheduledTasks st = new ScheduledTasks();  
  28.             Task autoDownload = st.CreateTask(taskName);  
  29.             DailyTrigger dayTrigger = new DailyTrigger(Convert.ToInt16(hour), Convert.ToInt16(minute), Convert.ToInt16(interval));//get default config from app.config  
  30.   
  31.             autoDownload.Triggers.Add(dayTrigger);  
  32.             //autoDownload.SetAccountInformation(userName, userPwd);//to authorize the console ro run  
  33.             autoDownload.ApplicationName = Assembly.GetExecutingAssembly().Location;  
  34.               
  35.             //you can also modify the values in app.config   
  36.             //and publish it, then you can add the application name here  
  37.             //autoDownload.ApplicationName = "";  
  38.             autoDownload.Save();  
  39.             autoDownload.Close();  
  40.         }  
  41.         //else  
  42.         //{  
  43.         //    DelTask(taskName);  
  44.         //    AddTask();  
  45.         //}  
  46.     }  
  47.   
  48.     /// <summary>  
  49.     /// Select Task from TaskScheduler  
  50.     /// </summary>  
  51.     /// <param name="taskName"></param>  
  52.     /// <returns></returns>  
  53.     public bool SelTask()  
  54.     {  
  55.         bool flag = false;  
  56.         ScheduledTasks st = new ScheduledTasks();  
  57.         string[] taskNameStr = st.GetTaskNames();  
  58.         foreach (string item in taskNameStr)  
  59.         {  
  60.             if (taskName == item.Split('.')[0])  
  61.             {  
  62.                 flag = true;  
  63.                 break;  
  64.             }  
  65.         }  
  66.   
  67.         return flag;  
  68.     }  
  69.   
  70.     /// <summary>  
  71.     /// Delete Task  
  72.     /// </summary>  
  73.     /// <param name="taskName"></param>  
  74.     public void DelTask(string taskName)  
  75.     {  
  76.         if (taskName != "" && taskName != null)  
  77.         {  
  78.             ScheduledTasks st = new ScheduledTasks();  
  79.             st.DeleteTask(taskName);  
  80.         }  
  81.     }  
  82.   
  83.     /// <summary>  
  84.     /// Set Default Value for Variables  
  85.     /// </summary>  
  86.     public void InitVariables()  
  87.     {  
  88.         hour = ConfigurationManager.AppSettings["taskHour"];  
  89.         minute = ConfigurationManager.AppSettings["taskMinute"];  
  90.         interval = ConfigurationManager.AppSettings["interval"];  
  91.         taskName = ConfigurationManager.AppSettings["taskName"];  
  92.         userName = ConfigurationManager.AppSettings["taskUser"];  
  93.         userPwd = ConfigurationManager.AppSettings["taskPwd"];  
  94.     }  
  95. }  

这样,一个简单的任务计划操作类就完成了,简单说下,因为目前我的很多的值都需要存储在app.config中,以便日后修改或进行配置,所以我的变量大多是直接读取app.config中的值来实现赋值的,这也是下一步我打算完善的,希望把这个作为一个公共类,可以让其他人直接使用。

原文地址:https://www.cnblogs.com/zxtceq/p/7850994.html