好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

接着运行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);
                }
            }
        }
    }
} 

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

示例源码  点击下载。

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于分享iOpenWorks插件仓库中非常简单强大的定时调度插件的使用的详细内容...

  阅读:34次