原理

最常用的就是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. 读取本地word 浏览器下载(设置编码格式)

    String filePath = "C:\\word\\报告.doc"; BufferedWriter bos = null; BufferedReader bis = null ...

  2. Spring boot 事务Transactional

    开启事务只需要加上注解@Transactional即可 // 默认情况下数据库的事务作用范围是在JapRepository 的crud上 // save 一旦执行成功,就会进行提交 // 开启事务后遇 ...

  3. js逆向笔记

    1.nodejs运行js的时候 navigator如果找不到可以可设置为空对象 var navigator={}; 2.使用nodejs如果window对象找不到的时候 可以使用jsdom模块 3.顶 ...

  4. Django 创建数据库表

    1.连接数据库之前,我们需要在setting中修改一些内容 2.Django的表是在models中创建的,一个class代表一个数据库表 abstract是为了继承,将该基类定义为抽象类,即不必生成数 ...

  5. ubuntu之路——day10.7 提高模型的表现

    总结一下就是在提升偏差的方面(即贝叶斯最优误差和训练误差的差距) 1.尝试更大更深的网络 2.加入优化算法比如前面提过的momentum.RMSprop.Adam等 3.使用别的神经网络架构比如RNN ...

  6. Android反编译,apk反编译技术总结

    1.谷歌提供的工具:android-classyshark 下载地址:https://github.com/google/android-classyshark/releases,下载下来之后是一个可 ...

  7. expdp导出卡住问题诊断

    本文链接:https://blog.csdn.net/guogang83/article/details/78800487 [oracle@database ~]$nohup expdp gg/gg ...

  8. Vue 使用axios分片上传

    Vue的界面 <input type="file"/> 上传方法 fileUpload: function () { var num = 1 var file = do ...

  9. git只提交修改部分的代码

    思路: 先用git status 查找出哪些文件被修改过了,然后 只git commit odin/code/pom.xml 1. $ git status (查看当前更改的代码) On branch ...

  10. [转]Windows系统下批量重命名文件(bat命令版本)

    原文地址:https://jingyan.baidu.com/article/6dad507524bdcba122e36e44.html 我们有时候会遇到大量文件需要重命名,Windows系统下右键菜 ...