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

    示例源码 点击下载。

  • 相关阅读:
    Shared Memory in Windows NT
    Layered Memory Management in Win32
    软件项目管理的75条建议
    Load pdbs when you need it
    Stray pointer 野指针
    About the Rebase and Bind operation in the production of software
    About "Serious Error: No RTTI Data"
    Realizing 4 GB of Address Space[MSDN]
    [bbk4397] 第1集 第一章 AMS介绍
    [bbk3204] 第67集 Chapter 17Monitoring and Detecting Lock Contention(00)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3054083.html
Copyright © 2011-2022 走看看