分享iOpenWorks插件仓库中非常简单强大的定时调度插件的使用
目前iOpenWorks平台已经集成了一个定时调度器插件,它基于流畅接口编程快速实现各种定时任务的实现,比系统自动的Timer类功能强大且好用。下面我们来看看这个示例如何使用这个插件。
1 准备工作
1.1 安装iOpenWorks插件开发平台
首先安装iOpenWorks插件开发框架,你可以从http://www.iopenworks.com/Products/SDKDownload 下载插件框架,这个插件框架是免费的,适合于.NET平台下ASP.NET、MVC、WinForm、WPF等任意应用,支持.NET Frameworks 2.0+。
1.2 创建插件主程序,并下载界面插件和定时调度插件
安装插件框架后,启动Visual Studio,创建一个插件主程序。如下所示。
接着运行F5,运行新建的项目,在这里选择下载两个插件,如下所示。
现在我们已经下载了一个界面插件(一个Outlook风格的主界面插件)和定时调度插件了,接着我们需要停止运行项目,并新建一个插件项目,来看看如何使用。
2 使用定时调度插件
2.1 新建一个测试插件
下面我们要在创建的TestPlugin插件项目中使用定时调度插件。下图是创建的项目。
接着双击Manifest.xml,然后选择“运行时”选型卡,在这里添加对定时调度插件的依赖。
然后再TestPlugin项目中,添加对FluentScheduler.dll的引用,接着编辑Form1。
2.2 定时调度任务编程
在该窗体的Load事件中使用调度器来定时更新Label。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using FluentScheduler; namespace TestPlugin { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { TaskManager.Initialize(new TaskRegistry(this)); } class TaskRegistry : Registry { private Form1 _form; private MyTask _myTask; public TaskRegistry(Form1 form) { _form = form; _myTask = new MyTask(_form); Action updatePerSecondAction = () => _form.PerSecondUpdateLabel.Text = DateTime.Now.Second.ToString(); Action updatePerMinuteAction = () => _form.PerMinuteUpdateLabel.Text = DateTime.Now.Minute.ToString(); Schedule(() => { _form.Invoke(updatePerSecondAction); }).ToRunNow().AndEvery(1).Seconds(); Schedule(() => { _form.Invoke(updatePerMinuteAction); }).ToRunNow().AndEvery(1).Minutes(); // 更多简单定时支持如下。 // Schedule(() => { }).ToRunNow().AndEvery(1).Hours().At(3); 每小时第3分钟 // Schedule(() => { }).ToRunNow().AndEvery(1).Days().At(3, 0); 每天第3点0分 // 每周一或二的3点0分 // Schedule(() => { }).ToRunNow().AndEvery(1).Weeks().On(DayOfWeek.Monday | DayOfWeek.Tuesday).At(3, 0); // 每个月第一个周一的3点0分 // Schedule(() => { }).ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0); Schedule<MyTask>().ToRunNow().AndEvery(1).Seconds(); } public override ITask GetTaskInstance<T>() { if (typeof(T).Name.Equals("MyTask")) { return _myTask; } else { return base.GetTaskInstance<T>(); } } } public class MyTask : ITask { private Form1 _form; private int _count = 0; private Action<string> _invokeAction; public MyTask(Form1 form) { _form = form; _invokeAction = text => _form.CustomUpdateLabel.Text = text; } public void Execute() { if (DateTime.Now.Second % 3 == 0) { _count++; _form.Invoke(_invokeAction, "每3秒钟执行,当前执行次数为:" + _count); } } } } }
好了,我们已经学会如何使用这个简单的定时调度插件了,下图是项目运行结果。
示例源码 点击下载。