定时任务-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(); } } }