zoukankan      html  css  js  c++  java
  • c# 使用timer定时器操作,上次定时到了以后,下次还未执行完怎么处理

    c# 使用timer定时器操作,下次定时到了以后,上次还未执行完怎么办

    ------解决方案--------------------------------------------------------
    开始的时候,禁用定时器,你可以在执行完毕之后再启用定时器

    定时器定时执行某一个方法时,可能由于执行的时间长要比间隔的时间长,则这种情况可能导致线程并发性的问题。建议加上Lock
    private static object LockObject = new Object();
    private static void CheckUpdatetimer_Elapsed(object sender, ElapsedEventArgs e)
    {
        // 加锁检查更新锁
       lock (LockObject)
       {
       }
    }
    // From command line, compile with /r:System.dll
    using System;
    using System.Timers;
    using System.Threading;

    public class Timer2
    {
        //static System.Windows.Forms.Timer aTimer = new System.Windows.Forms.Timer();

        private static System.Timers.Timer aTimer;
        static object o = new object();
        public static void Main()
        {
            // Normally, the timer is declared at the class level,
            
    // so that it stays in scope as long as it is needed.
            
    // If the timer is declared in a long-running method,  
            
    // KeepAlive must be used to prevent the JIT compiler 
            
    // from allowing aggressive garbage collection to occur 
            
    // before the method ends. (See end of method.)
            
    //System.Timers.Timer aTimer;

            
    // Create a timer with a ten second interval.
            aTimer = new System.Timers.Timer(2000);
            aTimer.Enabled = true;

            // Hook up the event handler for the Elapsed event.
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

            // Only raise the event the first time Interval elapses.
            aTimer.AutoReset = true;

            Console.WriteLine("Press the Enter key to exit the program.");
            Console.ReadLine();

            // If the timer is declared in a long-running method, use
            
    // KeepAlive to prevent garbage collection from occurring
            
    // before the method ends.
            
    //GC.KeepAlive(aTimer);
        }

        

        // Specify what you want to happen when the Elapsed event is 
        
    // raised.
        static object name=0;
        private static void OnTimedEvent(object source, ElapsedEventArgs e)
        {
            //lock (o)
            {
                aTimer.Enabled = false;
                aTimer.Interval = 1000;
                lock(name)
                {
                    name = Convert.ToInt32(name) + 1;
                    Thread.CurrentThread.Name = name.ToString();
                }
                Console.WriteLine(DateTime.Now.ToString()+"-"+Thread.CurrentThread.Name);
                //Thread.Sleep(1000000);
                Waste();
                aTimer.Enabled = true
            }

        }

        /// <summary>
        
    /// 模拟长时间的操作
        
    /// </summary>
        public static void Waste()
        {
            for (int i = 0; i < Int32.MaxValue; i++)
            {
                
            }
            //Thread.Sleep(10000);
            Console.WriteLine(DateTime.Now.ToString()+"完成-"+Thread.CurrentThread.Name);
        }
    }
  • 相关阅读:
    格式化数字,将字符串格式的数字,如:1000000 改为 1 000 000 这种展示方式
    jquery图片裁剪插件
    前端开发采坑之安卓和ios的兼容问题
    页面消息提示,上下滚动
    可以使用css的方式让input不能输入文字吗?
    智慧农村“三网合一”云平台测绘 大数据 农业 信息平台 应急
    三维虚拟城市平台测绘 大数据 规划 三维 信息平台 智慧城市
    农业大数据“一张图”平台测绘 大数据 房产 国土 农业 信息平台
    应急管理管理局安全生产预警平台应急管理系统不动产登记 测绘 大数据 规划 科教 三维 信息平台
    地下综合管廊管理平台测绘 大数据 地下管线 三维 信息平台
  • 原文地址:https://www.cnblogs.com/51net/p/3061231.html
Copyright © 2011-2022 走看看