定时任务-C#线程类 windows服务

原理

最常用的就是C#中 timer类写一个定时方法,然后在把他宿主到windows服务里面。

C#中Timer分类

关于C# Timer类  在C#里关于定时器类就有3个

C# Timer使用的方法1.定义在System.Windows.Forms里

C# Timer使用的方法2.定义在System.Threading.Timer类里  "

C# Timer使用的方法3.定义在System.Timers.Timer类里

◆System.Windows.Forms.Timer

应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API  SetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,Console  Application(控制台应用程序)无法使用。   
  
◆System.Timers.Timer

和System.Threading.Timer非常类似,它们是通过.NET  Thread  Pool实现的,轻量,计时精确,对应用程序、消息没有特别的要求。

◆System.Timers.Timer还可以应用于WinForm,完全取代上面的Timer控件。它们的缺点是不支持直接的拖放,需要手工编码。

System.Threading.Timer

public class BizCommon
{
    /// <summary>
    /// 锁
    /// </summary>
    public static object LockObject = new object();

    public static void StartTime()
    {
        //第二个参数是回调方法的参数
        Timer t = new Timer(StartBiz, null, 0, 5000);
        //t.Change(0, 5000);
    }

    private static void StartBiz(object o)
    {
        if (Monitor.TryEnter(LockObject))
        {
            FileStream fs = new FileStream("C:\\log.txt", FileMode.OpenOrCreate);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine("Time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));
            sw.Close();
        }
    }
}

System.Timers.Timer

public class BizCommon
{
    /// <summary>
    /// 锁
    /// </summary>
    public static object LockObject = new object();

    public static void StartTime()
    {
        System.Timers.Timer tm = new System.Timers.Timer();
        tm.Interval = 5000;
        tm.Elapsed += new System.Timers.ElapsedEventHandler(StartBiz);
        tm.AutoReset = true; //执行一次false,一直循环执行true
        tm.Enabled = true;//是否执行Elapsed事件。
        tm.Start();
        //tm.Stop();
    }
    private static void StartBiz(object sender, System.Timers.ElapsedEventArgs e)
    {
        if (Monitor.TryEnter(LockObject))
        {
            FileStream fs = new FileStream("C:\\log.txt", FileMode.OpenOrCreate);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine("Time:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));
            sw.Close();
        }
    }
}

更多关于多线程的教程请看

http://www.cnblogs.com/wudequn/category/1154929.html

public static void StartTime()
{
    System.Timers.Timer tm = new System.Timers.Timer();
    tm.Interval = 1000;
    tm.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
    tm.Start();

}
private static void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    int intHour = e.SignalTime.Hour;
    int intMinute = e.SignalTime.Minute;
    int intSecond = e.SignalTime.Second;
    // 设置 每天 00:00:00开始执行程序
    //
    //由于计算机性能问题,有时候可能会跳过某一秒,导致没有执行。  这种导致任务没有处理的异常叫做missfire
    //这种就要做很多处理,其他时间段在查看数据库是否今天这个时间处理过。没有处理在重新处理等等 补偿操作。
    if (intHour == 00 && intMinute == 00 && intSecond == 00)
    {
        //do something
    }
}

特定时间点处理任务

Windows服务

创建过程

下载项目

编译完之后,里面有安装 和 写在 windows服务的批处理文件。

原文地址:https://www.cnblogs.com/wudequn/p/8353320.html

时间: 2024-10-09 13:28:13

定时任务-C#线程类 windows服务的相关文章

C#使用定时任务框架Windows.TaskSchedule.exe安装控制台应用程序创建的Windows服务

上一篇介绍了利用模板创建.安装以及卸载Windows服务,本篇继续研究这个话题,不过是创建控制台程序,使用Windows.TaskSchedule.exe安装. 为什么要使用控制台程序?--调试简单粗暴.哈哈. 创建控制台应用程序项目后,我们编辑服务主体代码,我们继续向文本文件中写入一句话. 在实现具体逻辑前,我们需要引用Windows.TaskSchedule.Extends.dll,服务类继承 IJob . 1 using System; 2 using System.Configurati

转:一个跨WINDOWS LINUX平台的线程类

来源:http://blog.csdn.net/dengxu11/article/details/7232681 继Windows下实现一个CThread封装类之后,这里我再实现一个跨WINDOWS LINUX平台的线程类 头文件 DXThread.h #ifndef __DXTHREAD_H__ #define __DXTHREAD_H__ #define DX_WINDOWS //在WINDOWS上就打开它 //#define DX_LINUX //在LINUX 上就打开它 #ifdef D

windows服务+定时任务(quartz.net)+nancy

需求一:软件要能在操作系统启动后,自动运行因为操作系统是windows 10,所以最先想到的是windows服务,因为windows服务有个自动启动选项,设为true就行了..net做这个最合适了,可以建windows服务项目. 需求二:包含N个任务,要求每天.每周.每月都可以执行,时间可自己设置面对这个需求,很明显Timer不适合了,最先想到的便是Quartz.net,因为这个东西之前也用过,所以就用它了.满足需求绰绰有余.有一点需要说明的是,具体时间是保存在数据库里面的,服务在从数据库读取到

C#-Windows服务+Quartz定时任务

Windows服务中,因为需要精确到特定时间执行,用Quartz代替定时器Timer. 顺便一提,Quartz如果在网页的项目中使用,Quartz会因为网页的关闭而停止,所以和Windows服务搭配较为理想. 1.新建服务 可以参考:https://www.cnblogs.com/ywkcode/p/11569593.html 2.Quartz使用 可以参考:https://www.cnblogs.com/ywkcode/p/11110126.html 代码如下: (1)创建任务 新建“Upda

windows服务控制类

/// <summary> /// 服务调用控制 /// </summary> public class WinServiceController { /// <summary> /// 服务开始启用 /// </summary> /// <typeparam name="T">服务调用的类型</typeparam> /// <param name="ServiceName">服务的

可视化Windows服务定时任务

思路:1.新建一个<Windows服务项目>,在里面建服务文件(可以多个),用来做要执行的任务. 2.新建一个<Windows窗体应用程序>,在这个程序里管理服务.如:安装.卸载.启动.停止. 示例(定时写日志): 1.新建解决方案,如图: 2.LogService里新建2个服务文件: 3.打开服务文件,右键: 4.设置属性: 5.在服务文件的OnStart事件里写要执行的任务. 6.在应用程序里对服务进行控制. 7.注意:把服务的文件copy到应用程序中. 最后:附上源码:

windows 服务实现定时任务调度(Quartz.Net)

我们通常在一些情况下需要软件具有一个自动执行某些任务的功能,但是又不希望直接启动软件,或者每次都要手动的来启动软件,这时我们可可以考虑到windows服务了. 首先创建一个windows服务项目(详细信息请参阅:C#创建Windows Service(Windows 服务)基础教程) 在创建好的项目中点击“单击此处切换到代码视图”切换到代码 我们主要关注一下两个方法: • OnStart – 控制服务启动 • OnStop – 控制服务停止 例: 1 public partial class S

Windows服务的安装及配合定时器编写简单的程序

最近要实时统计一些数据,所以就用到了Windows服务及定时任务,在这里记录下. Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序.Windows服务程序虽然是可执行的,但是它不像一般的可执行文件通过双击就能开始运行了,它必须有特定的启动方式.这些启动方式包括了自动启动和手动启动两种.对于自动启动的Windows服务程序,它们在Windows启动或是重启之后用户登录之前就开始执行了.只要你将相应的Windows服务程序注

如何注册java程序为windows服务

如何注册java 程序为windows 服务 最近想找个软件来控制电脑的关机时间,在网上找了几个,都是可视化界面的可以设置具体的关机时间的软件.由于我想编写的关机程序是运行在别人机器上,只能让该机器在晚上17 点到23 点25 分才上网,到了23 点25 分就可以自动关机.为了让别人感觉不到这个软件的“存在”(免得使用者自己关闭定时关机软件),所以我想把关机软件注册为服务的方式,运行在后台.这里介绍下如何利用javaService 软件把java 程序注册为windows 服务. 一.  利用j