标签:
后台执行指定任务方式:
sql Job,后台winform程序,windows服务等;
就三者而言各有利弊;
此次记录winform程序执行后台任务的主要代码:
1,Quartz方式:
IScheduler sched = null; private void AutoUpdateBlack_Load(object sender, EventArgs e) { try { ISchedulerFactory sf = new StdSchedulerFactory();//执行者 sched = sf.GetScheduler(); IJobDetail job = JobBuilder.Create<UpateBlackHandler>().WithIdentity("job1", "group1").Build(); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule("0 0 1 * * ?") //每天晚上1点运行一次 .Build(); sched.ScheduleJob(job, trigger); sched.Start(); label1.Text = "==程序启动=="; logclass.Debug("程序启动"); } catch (Exception ex) { logclass.Debug("程序==错误" + ex.ToString()); } new UpateBlackHandler().Execute(null); } private void AutoUpdateBlack_FormClosed(object sender, FormClosedEventArgs e) { if (e.CloseReason == CloseReason.WindowsShutDown) { //添加所需使用的代码 logclass.Debug(DateTime.Now + "【电脑关机或者被注销" + "===系统用户:" + System.Environment.UserName + "】"); } if (e.CloseReason == CloseReason.TaskManagerClosing) { //添加所需使用的代码 logclass.Debug(DateTime.Now + "【任务管理器关闭" + "===系统用户:" + System.Environment.UserName + "】"); } if (e.CloseReason == CloseReason.None) { //添加所需使用的代码 logclass.Debug(DateTime.Now + "【未知意外关闭" + "===系统用户:" + System.Environment.UserName + "】"); } if (sched != null) { sched.Shutdown(false); } } private void AutoUpdateBlack_FormClosing(object sender, FormClosingEventArgs e) { logclass.Debug("==程序关闭=="); System.Environment.Exit(System.Environment.ExitCode); }
参考:http://www.cnblogs.com/mushroom/p/4067037.html
Cron表达式使用格式(http://www.thinksaas.cn/group/topic/99159/)
Seconds | Minutes | Hours | DayofMonth | Month | DayofWeek | [Year] |
秒 | 分 | 时 | 天 | 月 | 周 | [年] |
每个符号代表的含义:
实用的例子 表达式 含义
“0 0 12 * * ?” | 每天12:00触发事件 |
“0 15 10 ? * *” | 每天10:15触发事件 |
“0 15 10 * * ?” | 每天10:15触发事件 |
“0 15 10 * * ? *” | 每天10:15触发事件 |
“0 15 10 * * ? 2005″ | 2005年的每天10:15触发事件 |
“0 * 14 * * ?” | 每天14点开始触发,每分钟触发一次,14:59分结束 |
“0 0/5 14 * * ?” | 每天14点开始触发到14:59分结束的每5分钟触发一次事件 |
“0 0/5 14,18 * * ?” | 每天14点开始到14:59期间和18点到18:59期间的每5分钟触发一次事件 |
“0 0-5 14 * * ?” | 每天14点到14:05期间的每1分钟触发一次事件 |
“0 10,44 14 ? 3 WED” | 每年3月的星期三的14:10和14:44触发一次事件 |
“0 15 10 ? * MON-FRI” | 周一至周五的10:15触发一次事件 |
“0 15 10 15 * ?” | 每月15日10:15触发一次事件 |
“0 15 10 L * ?” | 每月最后一日的10:15触发一次事件 |
“0 15 10 ? * 6L” | 每月的最后一个星期五10:15触发一次事件 |
“0 15 10 ? * 6L 2002-2005″ | 2002年至2005年的每月的最后一个星期五10:15触发一次事件 |
“0 15 10 ? * 6#3″ | 每月的第三个星期五10:15触发一次事件 |
2,线程池后台执行(ThreadPool.QueueUserWorkItem)
private void form1_Load(object sender, EventArgs e) { label1.Text = "==程序启动=="; label1.Text += "\r\n平台已启动"; Hangdler hd1 = new Hangdler(); ThreadPool.QueueUserWorkItem(new WaitCallback(hd1.IntoDB), "1"); } //hangdler 主要代码: public void IntoDB(object obj) { string canshu= obj.ToString()); //todo }
标签:
原文地址:http://www.cnblogs.com/systemkk/p/5257534.html