zoukankan      html  css  js  c++  java
  • Timer

    timer类有三种

    1.System.Windows.Forms.Timer 

    使用地方:Windows 窗体应用程序中,并且必须在窗口中使用。 

    2.System.Timers.Timer

    使用地方:在应用程序中

    一类是执行方法:

    1.System.Threading.Timer

    使用地方:执行方法的机制,无法继承此类。

    System.Windows.Forms.timer 用法

     

    1.System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();//实例化一个timer

    2.myTimer.Tick += new EventHandler(函数名); //给timer挂起事件//函数的参数为(Object myObject,EventArgs myEventArgs)

    3.myTimer.Enabled = true;//使timer可用

    4.myTimer.Interval = n; //设置时间间隔,以毫秒为单位

    5.myTimer.Stop(); //如果要暂停计时则使用Stop()方法

    6.myTimer.Enabled = false;//若要停止使用timer,则使之不可用

    System.Timers.Timer用法:

     System.Timers.Timer t = new System.Timers.Timer(10000);   //实例化Timer类,设置间隔时间为10000毫秒;   
         t.Elapsed += new System.Timers.ElapsedEventHandler(theout); //到达时间的时候执行事件;   
         t.AutoReset = true;   //设置是执行一次(false)还是一直执行(true);   
         t.Enabled = true;     //是否执行System.Timers.Timer.Elapsed事件;   
         
         public void theout(object source, System.Timers.ElapsedEventArgs e)   
          {   
             MessageBox.Show("OK!");   
          }  

     

     注意:在用System.Timers.Timer的时候 timer是会按照interval的时间严格运行(时间到了触发elapsed事件运行被注册的callback函数, 不管函数运行的时间多久) 因此会导致可能callback的事件还没有执行完 下一个callback又来执行了。导致线程激增。

    解决方法:

    private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        timer1.Enabled = false;
    
        try
        {
           。。。。。。。。。。。
        }
        catch ()
        {
            。。。。。。。。。。。
        }
        finally
        {
            timer1.Enabled = true;
        }
    }

     在callback函数运行的时候把timer关掉 结束函数时再开启。

    在函数中直接进行匿名的elapsed的方法的写法:

      timer.Elapsed += (obj, evet) =>
                {
                    TimerCustom singleTime = obj as TimerCustom;
                    singleTime.Enabled = false;
                    if (singleTime != null)
                    {
                        if (singleTime.queue.Count != 0)
                        {
                            var item = singleTime.queue.Dequeue();
                            Send(item);
                            singleTime.Enabled = true;
                        }
                    }
                };

    System.Threading.Timer用法:

    Demo application:

    应用场景:在windows form程序自动执行某项工作后,希望其windows form能够自动关闭。

    代码设计:(1)首先声明Timer变量:

    private System.Threading.Timer timerClose;

    (2)在上述自动执行代码后面添加如下Timer实例化代码:

    // Create a timer thread and start it

    timerClose = new System.Threading.Timer(new TimerCallback(timerCall), this, 5000, 0);

    Timer构造函数参数说明:

    Callback:一个 TimerCallback 委托,表示要执行的方法。

    State:一个包含回调方法要使用的信息的对象,或者为空引用(Visual Basic 中为 Nothing)。

    dueTime:调用 callback 之前延迟的时间量(以毫秒为单位)。指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。

    Period:调用 callback 的时间间隔(以毫秒为单位)。指定 Timeout.Infinite 可以禁用定期终止。

    (3)定义TimerCallback委托要执行的方法:

    private void timerCall(object obj)

    {

          timerClose.Dispose();

          this.Close();

    }

    复制代码
     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Windows.Forms;
     9 using System.Threading;
    10 
    11 namespace MYTimerTest
    12 {
    13  public partial class Form1 : Form
    14  {
    15  public Form1()
    16  {
    17  InitializeComponent();
    18  }
    19 
    20 private void Form1_Load(object sender, EventArgs e)
    21  {
    22 
    23 System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(timer_Elapsed), null, 0, 1000);
    24  }
    25 
    26 void timer_Elapsed(object sender)
    27  {
    28  for (int i = 0; i < 10; i++)
    29  {
    30  Console.Out.WriteLine(DateTime.Now + " " + DateTime.Now.Millisecond.ToString() + "timer in:");
    31  }
    32 
    33  }
    34  }
    35 }
    复制代码
  • 相关阅读:
    因为这几个TypeScript代码的坏习惯,同事被罚了500块
    如何设计好分布式数据库,这个策略很重要
    线程、多线程和线程池,看完这些你就能全部搞懂了
    章方:征服耶鲁教授的算法大神程序媛
    从零开始学python | 使用Python映射,过滤和缩减函数:所有您需要知道的
    c# 优化代码的一些规则——用委托表示回调[五]
    mysql 重新整理——索引优化explain字段介绍一 [九]
    mysql 重新整理——索引优化explain简单介绍 [八]
    mysql 重新整理——索引简介[七]
    mysql 重新整理——七种连接join连接[六]
  • 原文地址:https://www.cnblogs.com/zhayunjia/p/5091060.html
Copyright © 2011-2022 走看看