Fork me on GitHub
分享iOpenWorks插件仓库中非常简单强大的定时调度插件的使用

分享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,创建一个插件主程序。如下所示。

image

接着运行F5,运行新建的项目,在这里选择下载两个插件,如下所示。

image

现在我们已经下载了一个界面插件(一个Outlook风格的主界面插件)和定时调度插件了,接着我们需要停止运行项目,并新建一个插件项目,来看看如何使用。

 

2 使用定时调度插件

2.1 新建一个测试插件

image

下面我们要在创建的TestPlugin插件项目中使用定时调度插件。下图是创建的项目。

image

接着双击Manifest.xml,然后选择“运行时”选型卡,在这里添加对定时调度插件的依赖。

image

然后再TestPlugin项目中,添加对FluentScheduler.dll的引用,接着编辑Form1。

image

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);
                }
            }
        }
    }
}
复制代码

好了,我们已经学会如何使用这个简单的定时调度插件了,下图是项目运行结果。

image

示例源码 点击下载。

posted on 2013-05-02 09:44  HackerVirus  阅读(1399)  评论(0编辑  收藏  举报