.NET定时任务执行管理器开源组件–FluentScheduler
在日常项目里通常会遇到定时执行任务的需求,也就是定时器。.NET Framework里关于定时器的类有3个,分别是System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer。这三个类用法灵活,也各有特点,应对简单的定时需求,用起来很轻松。如果面对复杂应用,比如任务影响窗体UI时就 要考虑多线程操作,多线程就避免不了考虑线程安全问题,这时候用起来就比较麻烦。
使用FluentScheduler组件,相对来说就轻松多了。FluentScheduler 是一个更精密和复杂的调度组件,它采用多线程操作,不会影响主线程,在线程安全方面它也有很好的处理,任务运行时还可以显式控制。FluentScheduler用起来也很简单,在GitHub上有应用示例FluentScheduler。这里举个简单应用示例。
- 获取FluentScheduler Package
首先可以使用Nuget程序包管理器获取FluentScheduler Package,在Nuget程序包管理器控制台中输入命令:Install-Package FluentScheduler,然后回车键即可。如图所示 - 创建定时任务
Registry registry = new Registry();
registry.Schedule(()=>
WriteDateTimeString()).WithName("WriteTimeString").ToRunNow().AndEvery(2).Seconds();
JobManager.Initialize(registry);
这里WriteDateTimeString()是自定义的方法,也就是定时执行的任务,其中WithName(“WriteTimeString”)中的WriteTimeString是给这个定时任务唯一ID,这个任务ID是用于显示控制任务,后面终止任务会用到。AndEvery(2).Seconds()意思是立即执行,而且每间隔2秒执行一遍。最后还需要JobManager.Initialize()函数初始化任务列表,Registry类是用于注册一个或多个任务,JobManager.Initialize之后,定时任务就立即执行。刚才提到的WriteDateTimeString()代码如下:
private void WriteDateTimeString()
{
SetText(DateTime.Now.ToString() + " 正在执行任务\n");
}
private void SetText(string text)
{
if (this.richTextBox1.InvokeRequired)
{
Action<string> setTextCallBack =SetText;
this.Invoke(setTextCallBack, new object[] { text });
}
else
{
this.richTextBox1.AppendText(text);
}
}
3.终止任务
终止任务很简单,就一行代码:
JobManager.RemoveJob("WriteTimeString");
整个例子运行截图如下图:
4.需要注意的地方
FluentScheduler 目前的版本FluentScheduler 5.0.0(2016年7月20日发布),使用函数与之前的版本略微有点不同。之前版本,使用TaskManager进行任务管理,5.0.0版使用JobManager管理任务。
5.示例代码地址
FluentScheduler 使用示例
.NET定时任务执行管理器开源组件–FluentScheduler的更多相关文章
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler定时器
在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器这个东东. .NET Framework有自 ...
- [转]推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器这个东东. .NET Framework有自 ...
- C#/ASP.NET定时任务执行管理器组件–FluentScheduler定时器
必须JobManager初始化 方式1: public void Start() { JobManager.AddJob(() => FetchingDa ...
- 英特尔® 硬件加速执行管理器安装指南 — Microsoft Windows*
介绍 本文将指导您安装英特尔® 硬件加速执行管理器(英特尔® HAXM),这是一款可以使用英特尔® 虚拟化技术(VT)加快 Android* 开发速度的硬件辅助虚拟化引擎(管理程序). 前提条件 英特 ...
- 第1组UI组件:布局管理器
1 布局管理的来源 为了让UI在不同的手机屏幕上都能运行良好----不同手机屏幕的分辨率/尺寸并不完全相同,如果让程序手动控制每个组件的大小.位置,会给编程带来巨大的麻烦.为了解决这个问题.andro ...
- 【java】浅析java组件中的布局管理器
这篇博文笔者介绍一下java组件中,常用的布局管理器.java组件中的布局方式有好几十种,所有的这些布局管理器都实现了java.awt.LayoutManager接口.接下来笔者介绍一下常用的5种布局 ...
- Android UI组件:布局管理器
为了更好的管理Android应用的用户界面中的组件,Android提供了布局管理器.通过使用布局管理器,Android应用的图形用户界面具有良好的平台无关性.通常,推荐使用布局管理器来管理组件的分布. ...
- [置顶] Android布局管理器 - 详细解析布局实现
布局管理器都是以ViewGroup为基类派生出来的; 使用布局管理器可以适配不同手机屏幕的分辨率,尺寸大小; 布局管理器之间的继承关系 : 在上面的UML图中可以看出, 绝对布局 帧布局 网格布局 相 ...
- 5、Java Swing布局管理器(FlowLayout、BorderLayout、CardLayout、BoxLayout、GirdBagLayout 和 GirdLayout)
5.Java-Swing常用布局管理器 应用布局管理器都属于相对布局,各组件位置可随界面大小而相应改变,不变的只是其相对位置,布局管理器比较难以控制,一般只在界面大小需要改是才用,但即使这 ...
随机推荐
- discuz 3.x 核心文件class_core.php解析
class_core.php是discuz 3.x的核心文件,几乎所有PHP脚本都有引用此文件初始化论坛运行环境.以下解析引用3.2版discuz. line 12-15:常量定义IN_DISCUZ: ...
- karma与webpack结合
一.必备插件 1.babel:es6的语法支持 2.karma:测试框架 3.jasmine:断言框架 4.webpack:打包工具 5.karma-webpack:karma调用webpack打包接 ...
- Javascript中call,apply,bind方法的详解与总结
在 javascript之 this 关键字详解 文章中,谈及了如下内容,做一个简单的回顾: 1.this对象的涵义就是指向当前对象中的属性和方法. 2.this指向的可变性.当在全局作用域时,thi ...
- Git常用命令总结
Git常用命令总结 git init 在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹. git clone ...
- iOS通讯录整合,兼容iOS789写法,附demo
苹果的通讯录功能在iOS7,iOS8,iOS9 都有着一定的不同,iOS7和8用的是 <AddressBookUI/AddressBookUI.h> ,但是两个系统版本的代理方法有一些变化 ...
- IOS开发基础知识--碎片3
十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice cur ...
- iOS 直播-实现后台录音并推流
iOS 直播-实现后台录音并推流 从一个月前开始开始接收公司的直播类app.到今天为止测试都已接近尾声,但是产品哥哥加了一个要求,就是在app进入后台后也实时保证录音并且推流. 刚听到这个的时候我也是 ...
- Linux下安装tar.gz类型的jdk,并配置环境变量
近期因要学习一门技术,必须在Linux下运行,故开始学习如何使用Linux. 在安装jdk时出现了困难,环境变量配置不成功,花了一天时间才搞定,特分享出来,供大家参考. Linux下安装jdk,步骤如 ...
- readonly
readonly 关键字是可以在字段上使用的修饰符. 当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中. 示例 在此示例 ...
- IO redirect
在OS中,每启动一个进程,就自动的分配了三个流到进程中. [0:标准输入流,即键盘输入].[1:标准输出流,输出到显示器].[2:错误输出流,输出到显示器],其余的还未指定. 基本IO操作 cmd & ...