zoukankan      html  css  js  c++  java
  • 分享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

    示例源码 点击下载。

  • 相关阅读:
    STM32标准库_05 | 用定时器写通用串口接收
    STM32标准库_04 | 串口接收不定长数据
    STM32标准库_03 | 串口printf打印
    STM32标准库_02 | 从按键开始认识状态机编程
    STM32标准库_01 | 搭建自己的程序框架
    STM32CubeMX的使用
    阿里云购买云服务器与域名
    阿里云物联网平台接入(使用MQTT协议)
    JAVA的JDK和API的区别是什么?
    Java经典实例
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3054083.html
Copyright © 2011-2022 走看看