Task Scheduler
来源:互联网 发布:程序员面试宝典 微盘 编辑:程序博客网 时间:2024/06/05 03:56
原文:http://www.codeproject.com/Articles/38553/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: OnlyOneTime
, Daily
, Weekly
and Monthly
.
So why another Task Scheduler?
We need for one of our projects a scheduler that
- Can check a date or show all dates on which a trigger will fire. (See the demo - button "Show List")
- 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:
OneTimeOnly
,Daily
,Weekly
andMonthly
- Monthly trigger:
DayOfMonth
andWeekday
- 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
FieldDescriptionStartDate
Specifies the first date on which the trigger will fireEndDate
Specifies the last date on which the trigger will fireTriggerTime
Specifies the time on which the trigger will fireEnabled
Enable / disable the triggerTriggerSettings
Set the appropriate trigger-dates as described belowTriggerItem.TriggerSettings
Overview:
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
- Create a new instance of
TaskScheduler
.Hide Copy Code// 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;
- Create a new Trigger-Item. Set start and end date + trigger time and if you like a tag.Hide Copy Code
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
"Hide Copy CodeTriggerItem.TriggerSettings.OneTimeOnly.Active = checkBoxOneTimeOnlyActive.Checked;triggerItem.TriggerSettings.OneTimeOnly.Date = dateTimePickerOneTimeOnlyDay.Value.Date;
Settings for "
Daily
"Hide Copy CodetriggerItem.TriggerSettings.Daily.Interval = (ushort)numericUpDownDaily.Value;
Settings for "
Weekly
"Hide Copy Codefor (byte day = 0; day < 7; day++) // Set the active DaystriggerItem.TriggerSettings.Weekly.DaysOfWeek[day] = checkedListBoxWeeklyDays.GetItemChecked(day);
Settings for "
Monthly
"Hide Copy Codefor (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);
- Add the trigger to the Collection and enable the SchedulerHide Copy Code
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.
- Task Scheduler
- Task Scheduler
- Task Scheduler
- Task Scheduler
- Task Scheduler Basic Function
- Windows Scheduler + Java Task
- Task Scheduler 细解
- Task Scheduler 使用
- Task Scheduler I & II
- Task Scheduler接口抽象
- LeetCode 621. Task Scheduler
- 【LeetCode】621. Task Scheduler
- leetcode 621 Task Scheduler
- [Leetcode 621] Task Scheduler
- 621. Task Scheduler
- [LeetCode] 621. Task Scheduler
- Leetcode 621. Task Scheduler
- [leetcode]621. Task Scheduler
- Linux环境下安装MySQL
- 分析内存的使用情况
- MySQL与PHP的整合
- gdb调试
- 对称加密---DES
- Task Scheduler
- #yum 常用选项
- 黑马程序员——java基础----GUI
- Java对于Cookie的操作详解
- neutron surround you(1)
- 面经
- 2015编程之美资格赛:基站选址 暴力
- 关于引用&的问题
- nyoj613 免费馅饼 动态规划