WinForm和WebForm 对Quartz定时器使用

时间:2023-02-03 00:22:52

Quartz是第三方提供的定时调度框架,其官方地址http://www.quartz-scheduler.org/

同样,安装惯例,该篇同样也是从项目中mark出来,方便对这个技术的惯例,好了废话不说,直接上code

第一步,引用Quartz相关的dll组件

下载地址http://download.csdn.net/detail/just_shunjian/9488369

第二步,项目中封装成QuartzHelper工具类

class QuartzHelper
    {
        private static IScheduler scheduler = null;

        public class EmailJob : IJob
        {
            public void Execute(IJobExecutionContext context)
            {
              //此处在响应定时时执行你需要执行的任务</span>
                
            }

        }

        /// <summary>
        /// 初始化定时器
        /// </summary>
        /// <param name="type">0:每天,1:每周</param>
        /// <param name="weekday">星期几</param>
        /// <param name="hour">小时</param>
        /// <param name="minute">分钟</param>
        public static bool init(int type, string weekday, int hour, int minute)
        {
            try
            {
                //释放定时器
                release();

                //工厂
                ISchedulerFactory factory = new StdSchedulerFactory();
                //启动
                if (scheduler == null)
                    scheduler = factory.GetScheduler();

                //启动
                scheduler.Start();

                //描述工作
                IJobDetail job = JobBuilder.Create<EmailJob>().WithIdentity("Ipjob", "Ipjobs").Build();
                //触发器
                ITrigger trigger = null;
                if (type == 0)
                {//每天定时执行
                    trigger = TriggerBuilder.Create()
                    .WithIdentity("Iptrigger", "Ipjobs")
                    .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(hour, minute))//每天8:40执行
                    .Build();
                }
                else if (type == 1)
                {//每周星期几定时执行
                    DayOfWeek wday = (DayOfWeek)System.Enum.Parse(typeof(DayOfWeek), weekday);
                    trigger = TriggerBuilder.Create()
                    .WithIdentity("Iptrigger", "Ipjobs")
                    .WithSchedule(CronScheduleBuilder.WeeklyOnDayAndHourAndMinute(wday, hour, minute))//每周相应时间执行
                    .Build();
                }

                //执行
                scheduler.ScheduleJob(job, trigger);
            }
            catch (Exception)
            {

                return false;
           }

            return true;
        }

        /// <summary>
        /// 是否定时器
        /// </summary>
        public static void release()
        {
            if (scheduler != null && !scheduler.IsShutdown)
            {
                scheduler.Shutdown(true);
                scheduler = null;
            }
        }
    }

第三步,执行QuartzHelper工具类中的init方法

传入想要定时的方式及时间。即可完成定时设置,在时间达到时就会执行EmailJob中的方法Execute