现在做一个B/S项目需要用到计划任务,本来想自定写一个的,写了几句,突然想看看网上有没有现成可以用的.
结果在苦寻之下找到了Quartz这个组件.看过之后感觉还不错.决定用它实现计划任务了.
再找找看有没有现成的任务.但找了大半天.大多数都是C/S结构中用的.

于是就把自已的写的Demo放到网上,供大家参考一下,如有不正确之 处,还请大家多多指教!

第一步:
引用三个dll文件:Nullables.dll,Quartz.dll,Common.Logging.dll
没有引用Common.Logging.dll出出错.也没多看,大家可以看一下为什么!

第二步:

配置Web.Config文件

  1. <configSections>
  2. <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  3. <sectionGroup name="common">
  4. <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
  5. </sectionGroup>
  6. </configSections>
  7. <common>
  8. <logging>
  9. <factoryAdapter type="Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging">
  10. <arg key="showLogName" value="true" />
  11. <arg key="showDataTime" value="true" />
  12. <arg key="level" value="DEBUG" />
  13. <arg key="dateTimeFormat" value="HH:mm:ss:fff" />
  14. </factoryAdapter>
  15. </logging>
  16. </common>
  17. <quartz>
  18. <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler" />
  19. <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
  20. <add key="quartz.threadPool.threadCount" value="10" />
  21. <add key="quartz.threadPool.threadPriority" value="2" />
  22. <add key="quartz.jobStore.misfireThreshold" value="60000" />
  23. <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />
  24. </quartz>

第三步:
在页面上新建两个按钮:

第一个按钮执行简单的计划任务
如:几秒钟执行几次

第一个按钮执行复杂的计划任务
如:每天的夜间2:00执行一次,这种复杂的任务

在简单按钮单击事件,代码如下:

  1. ISchedulerFactory sf = new StdSchedulerFactory();
  2. IScheduler sched = sf.GetScheduler();
  3. JobDetail job = new JobDetail("job2", "group2", typeof(JobExecute_2));
  4. SimpleTrigger trigger = new SimpleTrigger("trigger2", "group2");//不同的计划任务,trigger名称不可以相同!
  5. trigger.StartTime = DateTime.Now.AddSeconds(5);
  6. trigger.RepeatInterval = 5000;
  7. trigger.RepeatCount = 1000;
  8. DateTime ft = sched.ScheduleJob(job, trigger);
  9. sched.Start();

JobExecute_2这个类就是要执行的具体任务,必继继承Ijob这个接口

代码:

  1. public class JobExecute_2:IJob
  2. {
  3. #region IJob 成员
  4. private static int n = 0;
  5. public void Execute(JobExecutionContext context)
  6. {
  7. ILog log = LogManager.GetLogger(typeof(JobExecute_2));
  8. StreamWriter w = null;
  9. try
  10. {
  11. n++;
  12. w = new StreamWriter("D:\\2.txt", true, System.Text.Encoding.UTF8);
  13. w.WriteLine("------------------------------------");
  14. w.WriteLine(n+" JobExecute_1正执行:时间:" + DateTime.Now);
  15. w.WriteLine("------------------------------------");
  16. }
  17. finally
  18. {
  19. if (w != null)
  20. {
  21. w.Close();
  22. w.Dispose();
  23. }
  24. }
  25. }
  26. #endregion
  27. }

复杂任务计划如下:

按钮单击事件:

  1. ISchedulerFactory sf = new StdSchedulerFactory();
  2. IScheduler sched = sf.GetScheduler();
  3. JobDetail job = new JobDetail("job1", "group1", typeof(JobExecute_1));
  4. CronTrigger trigger = new CronTrigger("trigger1", "group1", "job1", "group1");
  5. //二十秒执行一次
  6. trigger.CronExpressionString = "0/20 * * * * ?";
  7. sched.AddJob(job, true);
  8. DateTime ft = sched.ScheduleJob(trigger);
  9. sched.Start();
    1. JobExecute_1类具体代码:
    2. <pre name="code" class="csharp"> private static int i = 0;
    3. public void Execute(JobExecutionContext context)
    4. {
    5. StreamWriter w = null;
    6. try
    7. {
    8. i++;
    9. w = new StreamWriter("D:\\1.txt", true, System.Text.Encoding.UTF8);
    10. w.WriteLine("------------------------------------");
    11. w.WriteLine(i+" JobExecute_1正执行:时间:" + DateTime.Now);
    12. w.WriteLine("------------------------------------");
    13. }
    14. finally
    15. {
    16. w.Close();
    17. w.Dispose();
    18. }
    19. }</pre><br>
    20. <br>
    21. <p></p>
    22. <pre></pre>
    23. <br>
    24. 好了.到这里就大功告成了!
    25. <p></p>
    26. <p>可以运行一下试试啊!这样会定时在D盘根目录下1.txt和2.txt文件中写下日 志了!快快试试吧!</p>
    27. <p><a target="_blank" href="http://download.csdn.net/detail/wanzhuan2010/3597292">源码下载</a><br>
    28. </p>
    29. <p>还有一些具本的使用方法及介绍可以参考:</p>
    30. <p><a target="_blank" href="http://www.cnblogs.com/shanyou/archive/2007/09/04/881935.html">http://www.cnblogs.com/shanyou/archive/2007/09/04/881935.html<br>
    31. </a></p>
    32. <p><br>
    33. </p>
    34. <br>

Quartz在.Net网站中的使用方法(附Demo)的更多相关文章

  1. vagrant网站中box下载方法

    假设需要下载Laravel/homestead这个包. 首先定位到地址:https://app.vagrantup.com/laravel/boxes/homestead/versions/8.0.0 ...

  2. 关于linux asp.net MVC网站中 httpHandlers配置无效的处理方法

    近期有Jexus用户反映,在Linux ASP.NET MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型,但是在运行中并没有产生预期的效果,服务器返回了404( ...

  3. ASP.NET网站中获取当前虚拟目录的应用程序目录的方法(转)

    [原创]ASP.NET网站中获取当前虚拟目录的应用程序目录的方法 ASP.NET网站中获取当前虚拟目录的应用程序目录的方法1.问题描述:有时候,某个网页控件会被不同目录下文件使用,此时如果该控件中有一 ...

  4. 【前端】向blog或网站中添加语法高亮显示代码方法总结

    向blog或网站中添加语法高亮显示的代码方法总结 文章目录 预备知识 目标 第一类方法:嵌入 第二类方法:外部引用 第三类方法:忽略HTML和PHP 最近在写代码时遇到一个问题,就是如何让代码像在ID ...

  5. 【转载】ASP.NET中Server.MapPath方法获取网站根目录总结

    在ASP.NET网站应用程序中,可以通过Server.MapPath方法来获取跟服务器有关的目录信息,如获取网站的根目录.获取当前代码文件所在的目录路径.获取当前代码所在路径的上级路径等.Server ...

  6. 利用自定义动画 animate() 方法,实现某图书网站中“近 7 日畅销榜”中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠标移开时,继续滚动

    查看本章节 查看作业目录 需求说明: 利用自定义动画 animate() 方法,实现某图书网站中"近 7 日畅销榜"中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠 ...

  7. PHP获取网站中文章的第一张图片作为缩略图的方法

    调取文章中的第一张图作为列表页缩略图是很流行的做法,WordPress中一般主题默认也是如此,那我们接下来就一起来看看PHP获取网站中各文章的第一张图片的代码示例 $temp=mt_rand(1,4) ...

  8. 针对Linux ASP.NET MVC网站中 httpHandlers配置无效的解决方案

    近期有Linux ASP.NET用户反映,在MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型,但是在运行中并没有产生预期的效果,服务器返回了404(找不到网页) ...

  9. [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)

    目录 1.   介绍 2.   软件环境 3.   在运行示例代码之前(源代码 + 示例登陆帐号) 4.         jqGrid和AJAX 5.         GridSettings 6.  ...

随机推荐

  1. Xamarin.Forms android实现沉浸式

    在android项目里,这样设置 using System; using Android.App; using Android.Content.PM; using Android.Runtime; u ...

  2. vuex与redux,我们都一样

    vuex与redux的主要区别: redux:生成的全局数据流是通过每个组件的props逐层传递到各个子组件的,通过@connect装饰器绑定在this.props上面. vuex :生成的全局数据则 ...

  3. numpy.random模块常用函数解析

    numpy.random模块中常用函数解析 numpy.random模块官方文档 1. numpy.random.rand(d0, d1, ..., dn)Create an array of the ...

  4. linux内核开发程序风格

    变量命名法 这里是linux不是windows,所以匈牙利命名法是不允许使用的,在内核中,局部变量只要可以明确表达自己的意思,可以使用idx,i这种名字的id, 全局函数和变量需要有表达性的名字例如g ...

  5. const int * 和 int * const 傻傻分不清楚

    const int * a和int const *a一样,定义时不是必须初始化,指针可以指向其他变量,但是指向的变量的值不能修改. int * const定义时必须初始化,即必须指明指向哪个变量,定义 ...

  6. cookie & cookies

    cookie & cookies "use strict"; /** * * @author xgqfrms * @license MIT * @copyright xgq ...

  7. [luoguP2038] 无线网络发射器选址(模拟)

    传送门 又是个模拟水题,考虑边界就好,连long long都不用开. ——代码 #include <cstdio> #include <iostream> int n, d, ...

  8. Linux服务管理(Ubuntu服务管理工具sysv-rc-conf)(转)

    Linux运行级别 Linux系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不同,所要完成的工作和要达到的目的都不同,系统可以在这些运行级之间进行切换,以完成不同的工作. 运行 ...

  9. 1.3-动态路由协议EIGRP②

    LAB3:Wildcard Mask in EIGRP (通过反掩码,控制运行EIGRP的接口的范围             作用:控制有哪些接口在运行EIGRP) ~~~~~~~~~~~~~~~~~ ...

  10. android (13) Fragment使用下

    一.Fragment使用: 要在你的activity中管理Fragment,须要使用FragmentManager,能够通过getFragmentManager(),这里注意要是在v4包要用getSu ...