后台程序完成指定任务

后台执行指定任务方式:

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]
[年]

每个符号代表的含义:

  1. *:匹配该域的任意值;如*用在分所在的域,表示每分钟都会触发事件。
  2. ?:匹配该域的任意值。
  3. -:匹配一个特定的范围值;如时所在的域的值是10-12,表示10、11、12点的时候会触发事件。
  4. ,:匹配多个指定的值;如周所在的域的值是2,4,6,表示在周一、周三、周五就会触发事件(1表示周日,2表示周一,3表示周二,以此类推,7表示周六)。
  5. /:左边是开始触发时间,右边是每隔固定时间触发一次事件,如秒所在的域的值是5/15,表示5秒、20秒、35秒、50秒的时候都触发一次事件。
  6. L:last,最后的意思,如果是用在天这个域,表示月的最后一天,如果是用在周所在的域,如6L,表示某个月最后一个周五。(外国周日是星耀日,周一是月耀日,一周的开始是周日,所以1L=周日,6L=周五。)
  7. W:weekday,工作日的意思。如天所在的域的值是15W,表示本月15日最近的工作日,如果15日是周六,触发器将触发上14日周五。如果15日是周日,触发器将触发16日周一。如果15日不是周六或周日,而是周一至周五的某一个,那么它就在15日当天触发事件。
  8. #:用来指定每个月的第几个星期几,如6#3表示某个月的第三个星期五。

实用的例子 表达式 含义

“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
        }

时间: 2024-10-29 03:38:41

后台程序完成指定任务的相关文章

Linux和Windows启动后台程序

平时很多时候,我们需要通过脚本命令调用执行程序,集成一体后方便使用快捷.但是启动脚本窗口比较碍眼,能设置为后台运行既方便又美观. Linux启动后台程序 1.后台执行 nohup方法:不挂断的运行命令. 在执行命令语句前加上 nohup &方法:后台运行.在执行命令语句后加上 & 两种方法一般一起使用 例: nohup  command  & 2.查看进程:输入 ps -ef | grep ps:将某个进程显示出来 -A 显示所有程序.  -e 此参数的效果和指定"A&q

Java程序打开指定地址网页

1.今天遇到了需要手动输入http地址打开指定网页的需求,试着做一个用程序打开指定网页的功能,搜了一下,还真有一个现成的例子,稍加改造,实现自己的需求: 2.代码不多,两个文件:如下: package com.lgp.solr; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java

server后台程序的内存使用问题

眼下我开发的一个server后台程序存在这么一个问题,因为我的程序要不断的收发消息,并做统计.统计用的是stl的多重map.在统计中会不断的往map里赛数据. 可是每次统计后我都会调用clear()去释放内存,可是似乎并不奏效,仍然会有泄漏的现象.查资料,map的clear是将map内容清空,可是内存并不归还给系统,而是缓冲在内存池里以方便下次调用,有人提出,能够新建一个map,将两个map做swap操作,互换内容.然后delete这个新map.达到释放的效果.可是不奏效. 我也想到多重map,

linux前台与后台程序操作

亲爱的网友,我这里有套课程想和大家分享,如果对这个课程有兴趣的,可以加我的QQ2059055336和我联系. 课程内容简介 我们软件是基于移动设备的.所以我们必然的选择了安卓作为我们的开发工具.课程中,我们将简要的介绍Android的基本概念,然后进行我们的实战开发.在开发中,大家讲学习到基本的组件,适配UI,数据的存储,多线程下载,开机广播,闹钟提醒,短信发送等实际项目开发中碰到的有用的知识点.通过课程学习,让大家能够掌握Android软件开发的流程,注意点,及优化.帮助大家迅速的掌握Andr

如何处理android程序变为后台程序,系统回收资源,再次打开时,程序因为null指针等崩溃

home键等原因,程序会变为后台程序,系统会更具需要,可能回收资源,再打开时候,就会因为资源回收,再调用oncreate,没有Intent参数而导致程序崩溃.   这种情况,我们可以处理的方式有两种,一是用: @Override     protected void onSaveInstanceState(Bundle outState) {      // TODO Auto-generated method stub      super.onSaveInstanceState(outSta

Macbook怎么强制关闭后台程序?Macbook强制关闭后台程序的方法

有时候我们的Macbook电脑运行某个程序卡在那里耗了很长时间,程序本身有可能提供了取消按钮,点了也没有反应,这时候我们就很想强制关闭它了,那么Macbook怎么强制关闭后台运行的程序呢?下面完美小编就给大家带来几种关于Macbook怎么关闭后台程序的方法. 1.方法1: 我觉得最好得办法,按下快捷键:Command+Option+Esc来打开"强制退出应用程序"的窗口,然后选中你需要退出的程序,再点右下方的"强制退出"即可. 2.方法2: 如果你非常确定你正处于当

PHP后台程序员工作到如今的一点心得

一个项目的建立,一开始一定要有需求文档,没有需求文档的项目注定会改来改去.还被骂的很惨.要时刻牢记一句话:口说无凭,有文档为证. 第一:开发语言的选择,PHP,当然还有JAVA,.NET你做的项目当然是你学的后台语言. 第二:框架的选择,最好选被人踏过无数条坑的框架,来使用,因为很多你将要遇到的问题别人已经完成了,而且嘚瑟出来了. 这里PHP推荐Thinkphp.虽然网络上很多看不上TP框架的人,但是不可反对的一点就是,人家开源项目,也不要你钱,能坚持十年不是没有原因的.这里不是说其他框架不好,

ios后台程序持续运行方法

iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的.在后台时,程序会受到系统的很多限制,这样可以提高电池的使用和用户体验.但是有很多社交类的软件,如果因为它在后台就不能刷新到新的数据的话,那么这回影响到用户的体验,下面是将程序退到后台后可以继续运行儿不被系统清除的方法. 在appdelegate中 - (void)applicationDidEnterBackground:(UIApplication *)application{ UIBackgroundTaskIdentifie

.Net_用控制台程序打印指定行数的三角型(面试题)

.Net_用控制台程序打印指定行数的三角型(面试题) 下面是一个由*号组成的4行倒三角形图案.要求: 1.输入倒三角形的行数,行数的取值3-21之间,对于非法的行数,要求抛出提示“非法行数!”: 2.在屏幕上打印这个指定了行数的倒三角形. ******* ***** *** * static void Main(string[] args) { while (true) { int k = 1; Console.WriteLine("请输入行数"); int num = Convert