C#定時器

来源:https://www.cnblogs.com/LXLR/archive/2023/09/12/17696125.html
-Advertisement-
Play Games

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+"毫秒");
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 平衡二叉樹(Balanced Binary Tree) 平衡二叉樹是一種特殊的二叉搜索樹,它具有以下特點: 每個節點的左子樹和右子樹的高度差不超過1。 所有的子樹也都是平衡二叉樹。 通過保持平衡性,平衡二叉樹可以在最壞情況下仍然具有較好的性能,保證查找、插入和刪除操作的時間複雜度為O(log n)。 ...
  • 二叉搜索樹(Binary Search Tree,BST) 二叉搜索樹(Binary Search Tree),也稱二叉查找樹或二叉排序樹,是一種特殊的二叉樹,它滿足以下性質 對於二叉搜索樹的每個節點 左子樹中的所有節點的值都小於該節點的值 右子樹中的所有節點的值都大於(或等於)該節點的值 對於二叉 ...
  • 關註公眾號【TechLeadCloud】,分享互聯網架構、雲服務技術的全維度知識。作者擁有10+年互聯網服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智能實驗室成員,阿裡雲認證的資深架構師,項目管理專業人士,上億營收AI產品研發負責人。 語句 語句是Go編程語言中完成特定操作的單 ...
  • 二叉樹(binary tree) 二叉樹(Binary Tree)是一種常見的樹狀數據結構,它由一組節點組成,每個節點最多有兩個子節點,分別稱為左子節點和右子節點。二叉樹具有以下特點: 每個節點最多有兩個子節點,分別稱為左子節點和右子節點。 左子樹和右子樹也是二叉樹,它們的結構與父節點類似。 二叉樹 ...
  • 來源:https://www.cnblogs.com/zisefeizhu/p/13692782.html 前言 我司的集群時刻處於崩潰的邊緣,通過近三個月的掌握,發現我司的集群不穩定的原因有以下幾點: 1、發版流程不穩定 2、缺少監控平臺【最重要的原因】 3、缺少日誌系統 4、極度缺少有關操作文檔 ...
  • 面試題:@Transactional聲明式事務註解什麼時候會失效 前言 今天來分享一道比較有意思的面試題,“@Transactional聲明式事務註解什麼時候會失效?”。 對於這個問題,我們一起看看考察點和比較好的回答吧! 考察點 這個問題就是面試官想考察我們對@Transactional註解有沒有 ...
  • 歡迎訪問我的GitHub 這裡分類和彙總了欣宸的全部原創(含配套源碼):https://github.com/zq2599/blog_demos 關於LeetCode98 做這道題之前,我反覆審題,最後確認:沒錯,不存在什麼坑,這道題確實非常非常簡單,然而卻被官方定義為中等難度 這一定是送分,白撿一 ...
  • 上一篇《如何正確實現一個自定義 Exception》發佈後獲得不少 star。有同學表示很擔憂,原來自己這麼多年一直寫錯了。其實大家不用過分糾結,如果寫的是 .NET CORE 1.0+ 的程式,那麼大概率是沒有問題的。 有大佬已經在評論區指出這些信息是過時的了。確實在.NET CORE 發佈之後, ...
一周排行
    -Advertisement-
    Play Games
  • 前言 推薦一款基於.NET 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...