翼度科技»论坛 编程开发 .net 查看内容

C#定时器

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
C#常用的五种定时器分别是:

  • System.Timers.Timer
  • System.Threading.Timer
  • System.Windows.Threading.DispatcherTimer : WPF应用程序
  • System.Windows.Forms.Timer :WinForm应用程序
  • System.Diagnostics.Stopwatch :计时器
一、 System.Timers.Timer
定义:基于时间间隔的定时器,可以在一定时间间隔内一直重复执行。它使用Elapsed事件来通知定时器已经过去了指定的时间,并执行所需的操作。
  1. using System.Timers;<br><br>static void Main(string[] args)
  2. {
  3.     Timer timer = new Timer(1000);//1秒钟的时间间隔
  4.     timer.Elapsed += OnTimedEvent;
  5.     timer.AutoReset = true;//重复执行
  6.     timer.Enabled = true;//启动定时器
  7.     Console.WriteLine("按任意键退出");
  8.     Console.ReadKey();
  9. }
  10. private static void OnTimedEvent(Object source,ElapsedEventArgs e)
  11. {
  12.     Console.WriteLine("定时器事件触发,当前时间:" + DateTime.Now.ToString());
  13. }
复制代码
二、System.Threading.Timer
定义:基于线程池的定时器,可以在一定时间间隔内一直重复执行。它使用Callback委托来通知定时器已经过去了指定的时间,并执行所需的操作。
public Timer(TimerCallback callback, object state, int dueTime, int period):创建一个新的Timer实例,该实例在指定时间间隔内定期调用回调方法,并传递一个对象作为参数。

  • TimerCallback:回调方法,每次定时器调用时都会执行。
  • object:传递给回调方法的参数。
  • int:指定第一次调用回调方法的延迟时间(以毫秒为单位)。
  • int:指定每次调用回调方法的时间间隔(以毫秒为单位),Timeout.Infinite表示无限长等待时间。
public bool Change(int dueTime, int period):修改开始时间和间隔时间

  • timer.Change(5000, Timeout.Infinite);5s后执行一次定时器
  • timer.Change(-1, Timeout.Infinite);禁用定时器,定时器不再触发任何事件
  1. using System.Threading;
  2. static void Main(string[] args)
  3. {
  4.     Timer timer = new Timer(new TimerCallback(OnTimedEvent),null,0,1000);//1秒钟的时间间隔
  5.     Console.WriteLine("按任意键退出");
  6.     Console.ReadKey();
  7. }
  8. private static void OnTimedEvent(object state)
  9. {
  10.     Console.WriteLine("定时器事件触发,当前时间:"+DateTime.Now.ToString());
  11. }
复制代码
三、System.Windows.Threading.DispatcherTimer
定义:在UI线程上运行,并在指定的时间间隔内引发事件。它通常用于定期更新UI元素或执行其他UI相关任务。
使用:

  • 使用Interval属性设置定时器的时间间隔;
  • 注册Tick事件来通知定时器执行所需的操作;
  • 使用Start启动定时器;
  • 使用Stop暂停定时器;
注意:需要注意的是,由于DispatcherTimer是与UI线程关联的计时器,因此在处理事件时需要注 意不要阻塞UI线程,避免造成界面卡顿的问题。
  1. using System.Windows.Threading;
  2. public partial class MainWindow : Window
  3. {
  4.     public MainWindow()
  5.     {
  6.         InitializeComponent();
  7.         DispatcherTimer timer = new DispatcherTimer();
  8.         timer.Interval = TimeSpan.FromSeconds(1);
  9.         timer.Tick += TimerTick;
  10.         timer.Start();
  11.     }
  12.     private void TimerTick(object sender, EventArgs e)
  13.     {
  14.         lbl.Content = DateTime.Now.ToString();
  15.     }
  16. }
复制代码
四、System.Windows.Forms.Timer
定义:基于窗体的定时器,只能在Windows Forms应用程序中使用。它使用Tick事件来通知定时器已经过去了指定的时间,并执行所需的操作。
  1. using System;
  2. using System.Windows.Forms;
  3. class Program : Form
  4. {
  5.     private Timer timer;
  6.     static void Main(string[] args)
  7.     {
  8.         Application.Run(new Program());
  9.     }
  10.     public Program()
  11.     {
  12.         timer = new Timer();
  13.         timer.Interval = 1000; // 1秒钟的时间间隔
  14.         timer.Tick += OnTimedEvent;
  15.         timer.Start();
  16.         this.Text = "定时器示例";
  17.         this.Size = new System.Drawing.Size(200, 200);
  18.     }
  19.     private void OnTimedEvent(Object source, EventArgs e)
  20.     {
  21.         Console.WriteLine("定时器事件触发,当前时间:" + DateTime.Now.ToString());
  22.     }
  23. }
复制代码
五、System.Diagnostics.Stopwatch
定义:是一个高精度计时器,可以测量代码执行时间,但不是一个真正的计时器。它使用Start方法开始计时,使用Stop方法停止计时,并使用Elapsed属性获取经过的时间。
  1. using System.Diagnostics;
  2. static void Main(string[] args)
  3. {
  4.     Stopwatch stopwatch = new Stopwatch();
  5.     stopwatch.Start();
  6.     int sum = 0;
  7.     for(int i = 0; i < 100000000;i++)
  8.     {
  9.         sum = sum + i;
  10.     }
  11.     stopwatch.Stop();
  12.     Console.WriteLine("代码执行时间:"+stopwatch.ElapsedMilliseconds+"毫秒");
  13. }
复制代码
 

来源:https://www.cnblogs.com/LXLR/archive/2023/09/12/17696125.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具