国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

使用C#創建計劃任務(How to create a Task Scheduler use C# )

2019-11-17 02:27:25
字體:
來源:轉載
供稿:網友

使用C#創建計劃任務(How to create a Task Scheduler use C# )

本文主要講解了如何使用C#來創建windows計劃任務。

  • 需求:在不定時間段運行多個后臺程序(winfrom,wpf,console,等等)用于更新數據。
  • 問題:為什么要使用計劃任務,而不直接在程序中使用一個計時器來出發呢?

    •  答:最明顯的一點,使用計時器程序一直在后臺運行著,但需求中只需要一天運行一次,或一個月運行一次。一直后臺跑著計時這不白浪費CPU資源么。
  • 解決方案:
    • 使用windows自帶的計劃任務 在控制面板中可以看到,手動新建計劃任務。
    • 使用微軟自帶的類庫TaskScheduler("c:/windows/system32/taskchd.dll")來創建
    • 使用PRocess.Star() dos命令來創建計劃任務
      • dos命令運行scheduler.exe 最簡單實例:

        schtasks /create /sc minute /mo 1 /tn MyTask /tr calc.exe /st 09:00 //從9點開始每隔一分鐘運行一次記事本

        具體幫助文檔可在cmd命令框輸入:

        >schtasks /?

        >schtasks /create /?

        >schtasks /delete /?

        >schtasks /query /?

        >schtasks /change /?

      • 還可參照:https://msdn.microsoft.com/en-us/library/windows/desktop/bb736357%28v=vs.85%29.aspx

解決方案開始:

這里選用微軟自帶的類庫TaskScheduler,下面是封裝過的代碼,包含了刪除計劃任務、判斷計劃任務是否存在、獲取所有的計劃任務、創建計劃任務 。(具體看詳細注釋):

獲取計劃任務的列表:

     /// <summary>        /// get all tasks        /// </summary>        public static IRegisteredTaskCollection GetAllTasks()        {            TaskSchedulerClass ts = new TaskSchedulerClass();            ts.Connect(null, null, null, null);            ITaskFolder folder = ts.GetFolder("http://");            IRegisteredTaskCollection tasks_exists = folder.GetTasks(1);            return tasks_exists;        } 
View Code

判斷計劃任務是否存在:

/// <summary>        /// check task isexists        /// </summary>        /// <param name="taskName"></param>        /// <returns></returns>         public static bool IsExists(string taskName)        {            var isExists = false;            IRegisteredTaskCollection tasks_exists = GetAllTasks();            for (int i = 1; i <= tasks_exists.Count; i++)            {                IRegisteredTask t = tasks_exists[i];                if (t.Name.Equals(taskName))                {                    isExists=true;                    break;                }            }            return isExists;        }
View Code

刪除計劃任務:

 /// <summary>        /// delete task        /// </summary>        /// <param name="taskName"></param>        private static void DeleteTask(string taskName)        {            TaskSchedulerClass ts = new TaskSchedulerClass();            ts.Connect(null, null, null, null);            ITaskFolder folder = ts.GetFolder("http://");            folder.DeleteTask(taskName, 0);        }
View Code

創建計劃任務:

 /// <summary>        /// create scheduler        /// </summary>        /// <param name="creator"></param>        /// <param name="taskName"></param>        /// <param name="path"></param>        /// <param name="interval"></param>        /// <param name="startBoundary"></param>        /// <param name="descrWord                scheduler.Connect(null, null, null, null);                 //get scheduler folder                ITaskFolder folder = scheduler.GetFolder("http://");                                //set base attr                 ITaskDefinition task = scheduler.NewTask(0);                task.RegistrationInfo.Author = creator;//creator                task.RegistrationInfo.Description = description;//description                //set trigger  (IDailyTrigger ITimeTrigger)                ITimeTrigger tt = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);                tt.Repetition.Interval = interval;// format PT1H1M==1小時1分鐘 設置的值最終都會轉成分鐘加入到觸發器                tt.StartBoundary = startBoundary;//start time                //set action                IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);                action.Path = path;//計劃任務調用的程序路徑                task.Settings.ExecutionTimeLimit = "PT0S"; //運行任務時間超時停止任務嗎? PTOS 不開啟超時                task.Settings.DisallowStartIfOnBatteries = false;//只有在交流電源下才執行                task.Settings.RunOnlyIfIdle = false;//僅當計算機空閑下才執行                IRegisteredTask regTask = folder.RegisterTaskDefinition(taskName, task,                                                                    (int)_TASK_CREATION.TASK_CREATE, null, //user                                                                    null, // password                                                                    _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN,                                                                    "");                IRunningTask runTask = regTask.Run(null);                return runTask.State ;            }            catch (Exception ex)            {                throw ex;            }        }
View Code

完整代碼:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using TaskScheduler;namespace McodsBgManager{    public class SchTaskExt    {        /// <summary>        /// delete task        /// </summary>        /// <param name="taskName"></param>        private static void DeleteTask(string taskName)        {            TaskSchedulerClass ts = new TaskSchedulerClass();            ts.Connect(null, null, null, null);            ITaskFolder folder = ts.GetFolder("http://");            folder.D
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桦南县| 潢川县| 阿图什市| 黄大仙区| 蒙自县| 南华县| 郑州市| 和龙市| 长沙市| 文成县| 福泉市| 蚌埠市| 汶川县| 苍梧县| 板桥市| 无锡市| 新密市| 云和县| 江山市| 高雄市| 伊宁县| 抚远县| 汉沽区| 曲周县| 白朗县| 澳门| 玛沁县| 蛟河市| 巴中市| 峨眉山市| 通山县| 昂仁县| 阿尔山市| 贡山| 德昌县| 延安市| 中阳县| 石柱| 阿鲁科尔沁旗| 彭山县| 沂源县|