Task Scheduler

来源:互联网 发布:程序员面试宝典 微盘 编辑:程序博客网 时间:2024/06/05 03:56

原文:http://www.codeproject.com/Articles/38553/Task-Scheduler

A simple structured native task scheduler
  • Download demo project - 12.46 KB
  • Download source - 49.97 KB

Introduction

Task Scheduler is a class that schedules and automatically fires events at a time you specify. All important triggers are available: OnlyOneTimeDailyWeekly and Monthly.  

So why another Task Scheduler?

We need for one of our projects a scheduler that

  1. Can check a date or show all dates on which a trigger will fire.  (See the demo - button "Show List")
  2. We need to schedule tasks not only daily, weekly,... we need a combination of them. e.g. every Wednesday (weekly trigger) plus every last day in a month (monthly trigger)

Update 1: Version 1.1

  • Added date formatting during serialization/deserialization
  • Fixed issue in TriggerItem.FromXML()

Update 2: Version 1.2

  • Now using System.Timers.Timer instead of System.Windows.Forms.Timer
  • Minor changes in XML serialization
  • Demo now includes a Windows-Service with full service control (start/stop/install/uninstall)
  • TriggerItemCollection support now serialization / deserialization
  • Bug fixes

Features

  • Simple structure and easy to use
  • Possible triggers: OneTimeOnlyDailyWeekly and Monthly
  • Monthly trigger: DayOfMonth and Weekday
  • Collection of TriggerItems
  • Next Trigger-Date/Time information
  • Check if a TriggerItem will fire on a certain date CheckDate(DateTime date)
  • Combine different triggers in one item. (e.g. every Friday plus every last day in a month)
    If there is an overlap the Trigger will fire only one time
  • Save and restore TriggerItems to and from XML

Settings

FieldDescriptionStartDateSpecifies the first date on which the trigger will fireEndDateSpecifies the last date on which the trigger will fireTriggerTimeSpecifies the time on which the trigger will fireEnabledEnable / disable the triggerTriggerSettingsSet the appropriate trigger-dates as described below

TriggerItem.TriggerSettings Overview:
Another_TaskScheduler/TriggerSettings.jpg

To activate a specific date just set the appropriate flag(s):

// Activate Sunday on weekly trigger.triggerItem.TriggerSettings.Weekly.DaysOfWeek[(int)DayOfWeek.Sunday] = true;// Activate last Friday in January and FebruarytriggerItem.TriggerSettings.Monthly.Month[(int)TaskScheduler.MonthOfTheYeay.January] =     true; triggerItem.TriggerSettings.Monthly.Month[(int)TaskScheduler.MonthOfTheYeay.February] =     true; triggerItem.TriggerSettings.Monthly.DaysOfMonth[(int)TaskScheduler.DayOccurrence.Last] =    true; triggerItem.TriggerSettings.Monthly.WeekDay[(int)DayOfWeek.Sunday] = true;

Using TaskScheduler and TriggerItems

  1. Create a new instance of TaskScheduler.
    // Create the TaskSchedulerTaskScheduler _taskScheduler = new TaskScheduler();// Set the synchronizing object to get trigger events within the main thread.// Important if you're using Windows Forms_taskScheduler.SynchronizingObject = this;
  2. Create a new Trigger-Item. Set start and end date + trigger time and if you like a tag.
    TaskScheduler.TriggerItem triggerItem = new TaskScheduler.TriggerItem();triggerItem.Tag = textBoxlabelOneTimeOnlyTag.Text;triggerItem.StartDate = dateTimePickerStartDate.Value;triggerItem.EndDate = dateTimePickerEndDate.Value;triggerItem.TriggerTime = dateTimePickerTriggerTime.Value;// And the trigger-Event :)triggerItem.OnTrigger += new TaskScheduler.TriggerItem.OnTriggerEventHandler(    triggerItem_OnTrigger);

    Settings for "OneTimeOnly"

    TriggerItem.TriggerSettings.OneTimeOnly.Active = checkBoxOneTimeOnlyActive.Checked;triggerItem.TriggerSettings.OneTimeOnly.Date =     dateTimePickerOneTimeOnlyDay.Value.Date;

    Settings for "Daily"

    triggerItem.TriggerSettings.Daily.Interval = (ushort)numericUpDownDaily.Value;

    Settings for "Weekly"

    for (byte day = 0; day < 7; day++) // Set the active DaystriggerItem.TriggerSettings.Weekly.DaysOfWeek[day] =     checkedListBoxWeeklyDays.GetItemChecked(day);

    Settings for "Monthly"

    for (byte month = 0; month < 12; month++) // Set the active Months    triggerItem.TriggerSettings.Monthly.Month[month] =     checkedListBoxMonthlyMonths.GetItemChecked(month);// Set the active Days (0..30 = Days, 31=last Day) for monthly triggerfor (byte day = 0; day < 32; day++)    triggerItem.TriggerSettings.Monthly.DaysOfMonth[day] =     checkedListBoxMonthlyDays.GetItemChecked(day);// Set the active weekNumber and DayOfWeek// e.g the first monday, or the last friday...// 0..4: first, second, third, fourth or last weekfor (byte weekNumber = 0; weekNumber < 5; weekNumber++)         triggerItem.TriggerSettings.Monthly.WeekDay.WeekNumber[weekNumber] =     checkedListBoxMonthlyWeekNumber.GetItemChecked(weekNumber);for (byte day = 0; day < 7; day++)    triggerItem.TriggerSettings.Monthly.WeekDay.DayOfWeek[day] =     checkedListBoxMonthlyWeekDay.GetItemChecked(day);
  3. Add the trigger to the Collection and enable the Scheduler
    triggerItem.Enabled = true; // Set the Item-Active - State_taskScheduler.AddTrigger(item); // Add the trigger to List_taskScheduler.Enabled = true; // Start the Scheduler

Disclaimer

THE SOFTWARE AND THE ACCOMPANYING FILES ARE DISTRIBUTED "AS IS" AND WITHOUT ANY WARRANTIES WHETHER EXPRESSED OR IMPLIED. NO REPONSIBILITIES FOR POSSIBLE DAMAGES OR EVEN FUNCTIONALITY CAN BE TAKEN. THE USER MUST ASSUME THE ENTIRE RISK OF USING THIS SOFTWARE.



0 0
原创粉丝点击