C#常用的五種定時器分別是: System.Timers.Timer System.Threading.Timer System.Windows.Threading.DispatcherTimer : WPF應用程式 System.Windows.Forms.Timer :WinForm應用程式 S ...
C#常用的五種定時器分別是:
- System.Timers.Timer
- System.Threading.Timer
- System.Windows.Threading.DispatcherTimer : WPF應用程式
- System.Windows.Forms.Timer :WinForm應用程式
- System.Diagnostics.Stopwatch :計時器
一、 System.Timers.Timer
定義:基於時間間隔的定時器,可以在一定時間間隔內一直重覆執行。它使用Elapsed事件來通知定時器已經過去了指定的時間,並執行所需的操作。
using System.Timers;
static void Main(string[] args) { Timer timer = new Timer(1000);//1秒鐘的時間間隔 timer.Elapsed += OnTimedEvent; timer.AutoReset = true;//重覆執行 timer.Enabled = true;//啟動定時器 Console.WriteLine("按任意鍵退出"); Console.ReadKey(); } private static void OnTimedEvent(Object source,ElapsedEventArgs e) { Console.WriteLine("定時器事件觸發,當前時間:" + DateTime.Now.ToString()); }
二、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);禁用定時器,定時器不再觸發任何事件
using System.Threading; static void Main(string[] args) { Timer timer = new Timer(new TimerCallback(OnTimedEvent),null,0,1000);//1秒鐘的時間間隔 Console.WriteLine("按任意鍵退出"); Console.ReadKey(); } private static void OnTimedEvent(object state) { Console.WriteLine("定時器事件觸發,當前時間:"+DateTime.Now.ToString()); }
三、System.Windows.Threading.DispatcherTimer
定義:在UI線程上運行,併在指定的時間間隔內引發事件。它通常用於定期更新UI元素或執行其他UI相關任務。
使用:
- 使用Interval屬性設置定時器的時間間隔;
- 註冊Tick事件來通知定時器執行所需的操作;
- 使用Start啟動定時器;
- 使用Stop暫停定時器;
註意:需要註意的是,由於DispatcherTimer是與UI線程關聯的計時器,因此在處理事件時需要註 意不要阻塞UI線程,避免造成界面卡頓的問題。
using System.Windows.Threading; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromSeconds(1); timer.Tick += TimerTick; timer.Start(); } private void TimerTick(object sender, EventArgs e) { lbl.Content = DateTime.Now.ToString(); } }
四、System.Windows.Forms.Timer
定義:基於窗體的定時器,只能在Windows Forms應用程式中使用。它使用Tick事件來通知定時器已經過去了指定的時間,並執行所需的操作。
using System; using System.Windows.Forms; class Program : Form { private Timer timer; static void Main(string[] args) { Application.Run(new Program()); } public Program() { timer = new Timer(); timer.Interval = 1000; // 1秒鐘的時間間隔 timer.Tick += OnTimedEvent; timer.Start(); this.Text = "定時器示例"; this.Size = new System.Drawing.Size(200, 200); } private void OnTimedEvent(Object source, EventArgs e) { Console.WriteLine("定時器事件觸發,當前時間:" + DateTime.Now.ToString()); } }
五、System.Diagnostics.Stopwatch
定義:是一個高精度計時器,可以測量代碼執行時間,但不是一個真正的計時器。它使用Start方法開始計時,使用Stop方法停止計時,並使用Elapsed屬性獲取經過的時間。
using System.Diagnostics; static void Main(string[] args) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); int sum = 0; for(int i = 0; i < 100000000;i++) { sum = sum + i; } stopwatch.Stop(); Console.WriteLine("代碼執行時間:"+stopwatch.ElapsedMilliseconds+"毫秒"); }