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

    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();
            }
        }
    }
    View Code

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

    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服务的批处理文件。

  • 相关阅读:
    ORACLE的自定义排序
    PDA上一个UDP通讯客户端
    构造
    sort()的使用
    VC2012链接mySql
    宏的一些代码
    试卷
    疑问
    代码1
    vector学习
  • 原文地址:https://www.cnblogs.com/wudequn/p/8353320.html
Copyright © 2020-2023  润新知