原理

最常用的就是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, , );
//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 = ;
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 = ;
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 == && intMinute == && intSecond == )
{
//do something
}
}

特定时间点处理任务

Windows服务

创建过程

下载项目

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

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

  1. 子线程导致 Windows 服务停止的情况(Topshelf 结合 Quartz.NET)

    Ø  前言 本文主要记录子线程导致 Topshelf 和 Quartz.NET 的 Windows 服务停止的现象,以及使用几种常用子线程的注意事项.因为我们有时可能需要开启多个线程执行复杂的逻辑,如 ...

  2. 编写寄宿于windows服务的WCF服务

    由于业务中有些任务需要在后台静默长期运行,或者有些服务队响应的要求比较苛刻,这样的WCF服务就不适合寄宿于IIS中.IIS每隔一段时间w3wp进程会闲置超时,造成服务的运行停止,因此这种耗时或者定时任 ...

  3. C#使用ServiceController控制windows服务

    C#在,使用ServiceController控制类windows服务,添加首次使用前引文:System.ServiceProcess,空间中引用:using System.ServiceProces ...

  4. Windows服务中用Timer和线程两种方式来执行定时任务

    在Service服务文件夹下新建Windows服务 - TestService

  5. 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq

    常量,字段,构造方法   常量 1.什么是常量 ​ 常量是值从不变化的符号,在编译之前值就必须确定.编译后,常量值会保存到程序集元数据中.所以,常量必须是编译器识别的基元类型的常量,如:Boolean ...

  6. 可视化Windows服务定时任务

    思路:1.新建一个<Windows服务项目>,在里面建服务文件(可以多个),用来做要执行的任务. 2.新建一个<Windows窗体应用程序>,在这个程序里管理服务.如:安装.卸 ...

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

     来源:http://blog.csdn.net/dengxu11/article/details/7232681 继Windows下实现一个CThread封装类之后,这里我再实现一个跨WINDOWS ...

  8. windows服务定时任务

    其实定时任务时不时会碰到,只不过解决方案也不是只有一个,网上也有很多文章,但是没有一篇说得很清楚,尤其是安装环节,今天就着重说一下安装, 其他步骤带过,C#开发windows服务,开发,安装,调试 1 ...

  9. C#通过SC命令和静态公共类来操作Windows服务

    调用的Windows服务应用程序网址:http://www.cnblogs.com/pingming/p/5115304.html 一.引用 二.公共静态类:可以单独放到类库里 using Syste ...

随机推荐

  1. 区块链阶段1-Linux基础- 2 Linux文件系统

    2.1 什么是文件系统 文件系统是操作系统在磁盘或分区上组织文件的方法和数据结构.负责对磁盘空间进行组织和分配,存储文件数据,并对其提供保护和检索服务.学习Linux,首先需要了解整个 Linux 文 ...

  2. mysql小白入门

    mysql简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅 ...

  3. UMD、CommonJS、ES Module、AMD、CMD模块的写法

    AMD异步模块规范 RequireJS就是AMD的一个典型的实现. 以下是一个只依赖与jQuery的模块代码: // foo.js define(['jquery'], function($){ // ...

  4. Spring Boot|监控-Actuator

    Spring Boot 为我们提供了一个生产级特性-Actuator,包含很多实际有用的API,下面我们就一起来看看这些API. 一.Actuator 首先在程序中引入Actuator <!-- ...

  5. Java学习笔记-文件读写和Json数组

    Java文件读写 Java中I/O流对文件的读写有很多种方法,百度后主要看了以下三种 第一种方式:使用FileWriter和FileReader,对文件内容按字符读取,代码如下 String dir ...

  6. file_get_contents("php://input")

    $data = file_get_contents("php://input");     php://input 是个可以访问请求的原始数据的只读流. POST 请求的情况下,最 ...

  7. No module named 'lsb_release'

    python3.7安装后提示 No module named 'lsb_release' 修改"/usr/bin/lsb_release" #!/usr/bin/python3.5 ...

  8. Oracle 查询表分区相关信息

    Oracle 查询表分区相关信息 --表分区 --1,分区表信息 -- (1)显示数据库所有分区表的信息 select * from DBA_PART_TABLES a where a.owner=u ...

  9. Windows环境下最新OpenCV和Contribute代码的联合编译【20190505更新红字】

    解决这个问题,目的在于获得并使用最新的完全版本的代码,主要方法是对CMake能够熟练使用,并且对编译等基础支持有所了解. 因为这篇博客经过多次修改,所以里面的内容和配图可能有不是完全比对的地方,但是只 ...

  10. pythonUDP发送结构体,对齐到C++结构体

    给出程序先: import random import socket import struct import threading import pickle import json from str ...