原理
最常用的就是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