最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#定時器與延時操作的使用

 更新時間:2026年04月10日 09:47:19   作者:一杯拿鐵丨  
本文詳細介紹了C#開發(fā)中常用的定時器與延時機制,主要內(nèi)容包括 定時器類對比,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

引言

在 C# 開發(fā)的廣袤領(lǐng)域中,定時器與延時機制宛如隱匿在幕后的精密齒輪,悄無聲息卻又至關(guān)重要地推動著程序的高效運轉(zhuǎn)。它們是構(gòu)建復(fù)雜邏輯和實現(xiàn)特定功能的基石,為開發(fā)者提供了對程序執(zhí)行時間的精準把控。

定時器,如同一位不知疲倦的時間管家,按照預(yù)設(shè)的時間間隔準時觸發(fā)事件,執(zhí)行特定的代碼塊。在數(shù)據(jù)處理中,我們常常需要定時從數(shù)據(jù)庫中獲取最新數(shù)據(jù),進行實時分析與展示;在網(wǎng)絡(luò)通信中,定時發(fā)送心跳包以維持連接的穩(wěn)定性,確保信息的順暢傳輸。這些場景都離不開定時器的助力,它讓程序能夠有條不紊地按照既定節(jié)奏工作,實現(xiàn)各種自動化任務(wù)。

而延時,則像是為程序執(zhí)行流程按下了 “暫停鍵”,讓特定的操作在經(jīng)過一段指定的時間后再執(zhí)行。當我們啟動一個程序時,可能需要延時片刻,等待系統(tǒng)資源的初始化和加載,確保程序后續(xù)的穩(wěn)定運行;在用戶交互過程中,為了避免頻繁操作導(dǎo)致的系統(tǒng)壓力,也會設(shè)置一定的延時,提升用戶體驗。

無論是定時器還是延時,它們都在 C# 開發(fā)中扮演著不可或缺的角色,幫助開發(fā)者實現(xiàn)定時任務(wù)、控制程序執(zhí)行節(jié)奏、優(yōu)化用戶體驗等。接下來,就讓我們一同深入探索 C# 定時器與延時的奇妙世界,揭開它們神秘的面紗,學(xué)習(xí)如何在實際項目中巧妙運用它們。

C# 定時器詳解

常見定時器類介紹

在 C# 的龐大類庫中,為我們提供了多種定時器類,以滿足不同場景下的定時需求。其中,較為常見的有 System.Windows.Forms.Timer、System.Threading.Timer 和 System.Timers.Timer,它們各自有著獨特的特點和適用場景。

  • System.Windows.Forms.Timer:主要應(yīng)用于 Windows 窗體應(yīng)用程序中,它運行在 UI 線程上,通過 Tick 事件來觸發(fā)定時操作。這使得它在更新 UI 元素時非常便捷,因為可以直接在 Tick 事件處理程序中操作 UI 控件,而無需擔(dān)心線程安全問題。不過,由于它依賴于 Windows 消息循環(huán),所以不適用于控制臺應(yīng)用程序等非 UI 環(huán)境,并且其時間精度相對較低,大約在 10 - 30 毫秒左右。
  • System.Threading.Timer:基于線程池來工作,是一種輕量級的定時器。它以回調(diào)的方式實現(xiàn)定時任務(wù),具有較高的執(zhí)行效率,適用于對性能要求較高、無需頻繁操作 UI 的后臺任務(wù)場景。它的啟動和停止操作相對靈活,并且可以通過構(gòu)造函數(shù)的參數(shù)來精確控制首次執(zhí)行時間和執(zhí)行間隔。但需要注意的是,在操作 UI 時,由于它不在 UI 線程上運行,所以需要進行跨線程操作的處理。
  • System.Timers.Timer:可以在多線程或單線程環(huán)境中使用,通過 Elapsed 事件觸發(fā)定時操作。它適用于對時間精度要求較高的場景,并且支持線程同步。在使用時,可以通過設(shè)置 AutoReset 屬性來決定事件觸發(fā)后是否自動重置定時器,以實現(xiàn)單次觸發(fā)或循環(huán)觸發(fā)的功能。不過,在操作 UI 時同樣需要注意跨線程的問題。

System.Windows.Forms.Timer 使用示例

接下來,我們通過一個簡單的 WinForms 項目來演示 System.Windows.Forms.Timer 的使用。首先,打開 Visual Studio,創(chuàng)建一個新的 Windows Forms 應(yīng)用程序項目。

在設(shè)計視圖中,從工具箱中找到 Timer 控件,并將其拖放到窗體上。此時,在窗體下方的組件欄中會出現(xiàn)一個 Timer 圖標,選中它,在屬性窗口中設(shè)置 Interval 屬性為 1000,表示時間間隔為 1 秒;設(shè)置 Enabled 屬性為 false,初始狀態(tài)下不啟動定時器。

然后,雙擊 Timer 控件,自動生成 Tick 事件處理程序。在事件處理程序中,我們可以編寫定時執(zhí)行的代碼。例如,我們要實現(xiàn)一個每秒更新一次 Label 顯示當前時間的功能,代碼如下:

private void timer1_Tick(object sender, EventArgs e)
{
    label1.Text = DateTime.Now.ToString("HH:mm:ss");
}

在上述代碼中,當 Timer 的 Tick 事件觸發(fā)時,會將當前時間以 “HH:mm:ss” 的格式賦值給 label1 的 Text 屬性,從而實現(xiàn)每秒更新一次時間顯示的效果。

最后,我們可以在窗體的 Load 事件或某個按鈕的 Click 事件中啟動定時器,例如:

private void Form1_Load(object sender, EventArgs e)
{
    timer1.Enabled = true;
}

這樣,當窗體加載完成后,定時器就會開始工作,每秒觸發(fā)一次 Tick 事件,更新 Label 的顯示內(nèi)容。

System.Threading.Timer 使用示例

System.Threading.Timer 的使用方式與 System.Windows.Forms.Timer 有所不同。下面是一個簡單的代碼示例,展示如何使用 System.Threading.Timer 來實現(xiàn)定時任務(wù):

using System;
using System.Threading;
class Program
{
    private static Timer timer;
    static void Main()
    {
        // 定義回調(diào)函數(shù)
        TimerCallback callback = new TimerCallback(TimerTask);
        // 創(chuàng)建Timer實例,設(shè)置啟動時間為0,間隔時間為1000毫秒(1秒)
        timer = new System.Threading.Timer(callback, null, 0, 1000);
        Console.WriteLine("按任意鍵停止定時器...");
        Console.ReadKey();
        // 停止定時器
        timer.Dispose();
        Console.WriteLine("定時器已停止");
    }
    // 回調(diào)函數(shù)
    private static void TimerTask(object state)
    {
        Console.WriteLine("定時器回調(diào)執(zhí)行于:" + DateTime.Now);
    }
}

在上述代碼中,首先定義了一個 TimerCallback 類型的回調(diào)函數(shù) TimerTask,該函數(shù)會在定時器觸發(fā)時執(zhí)行。然后,通過 Timer 的構(gòu)造函數(shù)創(chuàng)建了一個定時器實例,傳入回調(diào)函數(shù)、狀態(tài)對象(這里為 null)、首次執(zhí)行的延遲時間(0 毫秒,表示立即執(zhí)行)和執(zhí)行間隔時間(1000 毫秒)。在 Main 方法中,等待用戶按下任意鍵后,調(diào)用 timer.Dispose () 方法停止并釋放定時器資源。

需要注意的是,由于 System.Threading.Timer 基于線程池工作,其回調(diào)函數(shù)不在 UI 線程上執(zhí)行,所以在回調(diào)函數(shù)中不能直接操作 UI 控件。如果需要操作 UI,需要使用 Invoke 或 BeginInvoke 方法來切換到 UI 線程。例如,在 WinForms 應(yīng)用中,如果要在回調(diào)函數(shù)中更新 Label 的文本,可以這樣實現(xiàn):

using System;
using System.Threading;
using System.Windows.Forms;
namespace ThreadingTimerExample
{
    public partial class Form1 : Form
    {
        private static Timer timer;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            // 定義回調(diào)函數(shù)
            TimerCallback callback = new TimerCallback(TimerTask);
            // 創(chuàng)建Timer實例,設(shè)置啟動時間為0,間隔時間為1000毫秒(1秒)
            timer = new System.Threading.Timer(callback, null, 0, 1000);
        }
        // 回調(diào)函數(shù)
        private static void TimerTask(object state)
        {
            Form1 form = (Form1)state;
            form.Invoke((MethodInvoker)delegate
            {
                form.label1.Text = DateTime.Now.ToString("HH:mm:ss");
            });
        }
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            // 停止定時器
            timer.Dispose();
        }
    }
}

在這個示例中,將 Form1 實例作為狀態(tài)對象傳遞給定時器,在回調(diào)函數(shù)中通過 Invoke 方法將更新 Label 文本的操作切換到 UI 線程上執(zhí)行,以確保線程安全。

System.Timers.Timer 使用示例

System.Timers.Timer 的使用方式也有其特點,以下是一個使用 System.Timers.Timer 的示例代碼:

using System;
using System.Timers;

class Program
{
    private static Timer timer;

    static void Main()
    {
        // 創(chuàng)建Timer對象
        timer = new System.Timers.Timer();

        // 設(shè)置間隔時間為1000毫秒(1秒)
        timer.Interval = 1000;

        // 設(shè)置AutoReset屬性為true,表示事件關(guān)聯(lián)的方法會一直執(zhí)行
        timer.AutoReset = true;

        // 綁定Elapsed事件
        timer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);

        // 啟用定時器
        timer.Enabled = true;

        Console.WriteLine("按Enter鍵退出程序...");
        Console.ReadLine();

        // 停止定時器
        timer.Stop();
        timer.Dispose();
    }

    // Elapsed事件處理函數(shù)
    private static void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
    {
        Console.WriteLine("Elapsed事件于 {0:HH:mm:ss.fff} 觸發(fā)", e.SignalTime);
    }
}

在這段代碼中,首先創(chuàng)建了一個 System.Timers.Timer 對象,設(shè)置其 Interval 屬性為 1 秒,AutoReset 屬性為 true,這樣定時器會在每次到達時間間隔時自動重置并再次觸發(fā) Elapsed 事件。然后,通過 += 運算符將 OnTimedEvent 方法綁定到 Elapsed 事件上,當事件觸發(fā)時,會執(zhí)行 OnTimedEvent 方法,在控制臺輸出事件觸發(fā)的時間。最后,在程序結(jié)束時,調(diào)用 timer.Stop () 方法停止定時器,并調(diào)用 timer.Dispose () 方法釋放資源。

同樣,如果在 WinForms 應(yīng)用中使用 System.Timers.Timer 并需要操作 UI,也需要注意跨線程問題??梢酝ㄟ^設(shè)置 SynchronizingObject 屬性將定時器的操作同步到 UI 線程上,例如:

using System;
using System.Timers;
using System.Windows.Forms;

namespace TimersTimerExample
{
    public partial class Form1 : Form
    {
        private System.Timers.Timer timer;

        public Form1()
        {
            InitializeComponent();

            // 創(chuàng)建Timer對象
            timer = new System.Timers.Timer();

            // 設(shè)置間隔時間為1000毫秒(1秒)
            timer.Interval = 1000;

            // 設(shè)置AutoReset屬性為true,表示事件關(guān)聯(lián)的方法會一直執(zhí)行
            timer.AutoReset = true;

            // 綁定Elapsed事件
            timer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);

            // 將定時器的操作同步到UI線程
            timer.SynchronizingObject = this;

            // 啟用定時器
            timer.Enabled = true;
        }

        // Elapsed事件處理函數(shù)
        private void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
        {
            label1.Text = DateTime.Now.ToString("HH:mm:ss");
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            // 停止定時器
            timer.Stop();
            timer.Dispose();
        }
    }
}

在這個示例中,通過設(shè)置 timer.SynchronizingObject = this,將定時器的操作同步到當前窗體的 UI 線程上,這樣在 Elapsed 事件處理函數(shù)中就可以直接操作 UI 控件,而無需額外的跨線程處理。

定時器應(yīng)用場景舉例

在實際項目開發(fā)中,定時器有著廣泛的應(yīng)用場景,以下是一些常見的例子:

  • 定時數(shù)據(jù)備份:在數(shù)據(jù)庫管理系統(tǒng)中,為了保證數(shù)據(jù)的安全性和完整性,常常需要定時對數(shù)據(jù)庫進行備份操作。通過使用定時器,可以設(shè)置每天、每周或每月的特定時間點自動執(zhí)行備份任務(wù),將數(shù)據(jù)庫中的數(shù)據(jù)復(fù)制到安全的存儲位置,以防止數(shù)據(jù)丟失或損壞。例如,在一個企業(yè)級的財務(wù)管理系統(tǒng)中,每天凌晨 2 點定時備份財務(wù)數(shù)據(jù),確保數(shù)據(jù)的實時性和可恢復(fù)性。
  • 輪詢服務(wù)狀態(tài):在分布式系統(tǒng)中,各個服務(wù)之間相互協(xié)作,為了確保系統(tǒng)的穩(wěn)定性和可靠性,需要實時監(jiān)控各個服務(wù)的運行狀態(tài)。定時器可以定時向各個服務(wù)發(fā)送心跳請求,檢測服務(wù)是否正常響應(yīng)。如果某個服務(wù)在規(guī)定時間內(nèi)沒有響應(yīng),系統(tǒng)可以及時發(fā)出警報,并采取相應(yīng)的措施,如自動重啟服務(wù)或進行故障轉(zhuǎn)移。比如,在一個電商平臺的微服務(wù)架構(gòu)中,定時輪詢訂單服務(wù)、支付服務(wù)等的狀態(tài),確保用戶的購物流程不受影響。
  • 定時更新緩存:在 Web 應(yīng)用程序中,為了提高數(shù)據(jù)的訪問速度,常常使用緩存技術(shù)。然而,緩存中的數(shù)據(jù)需要與數(shù)據(jù)庫中的實時數(shù)據(jù)保持一致,因此需要定時更新緩存。定時器可以按照設(shè)定的時間間隔,從數(shù)據(jù)庫中獲取最新的數(shù)據(jù),并更新到緩存中,以保證用戶獲取到的數(shù)據(jù)是最新的。例如,在一個新聞資訊網(wǎng)站中,每 10 分鐘定時更新緩存中的熱門新聞列表,為用戶提供最新的新聞內(nèi)容。
  • 自動化任務(wù)調(diào)度:在一些需要定期執(zhí)行的任務(wù)中,如生成報表、發(fā)送郵件、清理臨時文件等,定時器可以發(fā)揮重要作用。通過設(shè)置定時器的觸發(fā)時間和執(zhí)行間隔,實現(xiàn)任務(wù)的自動化調(diào)度,減少人工干預(yù),提高工作效率。比如,在一個企業(yè)的辦公自動化系統(tǒng)中,每周一早上 9 點定時生成上周的工作報表,并自動發(fā)送給相關(guān)部門的負責(zé)人。

C# 延時實現(xiàn)方式

Thread.Sleep 方法

在 C# 中,Thread.Sleep方法是一種簡單直接的實現(xiàn)延時的方式。它的作用是使當前線程暫停執(zhí)行指定的時間,參數(shù)為毫秒數(shù)。例如,Thread.Sleep(1000)表示讓當前線程休眠 1000 毫秒,即 1 秒。

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        Console.WriteLine("開始延時...");
        Thread.Sleep(3000); // 延時3秒
        Console.WriteLine("延時結(jié)束");
    }
}

上述代碼中,當執(zhí)行到Thread.Sleep(3000)時,主線程會被阻塞,暫停執(zhí)行 3 秒,在此期間,線程不會執(zhí)行任何其他操作,3 秒后線程才會恢復(fù)執(zhí)行后續(xù)代碼。然而,由于Thread.Sleep會阻塞當前線程,如果在 UI 線程中使用,會導(dǎo)致界面無響應(yīng),出現(xiàn)卡頓甚至假死的情況,所以它不適合在需要保持界面交互性的 UI 線程中使用。但在一些簡單的控制臺應(yīng)用程序、測試代碼或者對線程執(zhí)行順序有嚴格要求且不需要線程在延時期間執(zhí)行其他任務(wù)的場景中,Thread.Sleep方法還是非常實用的。

Task.Delay 方法

Task.Delay方法是基于異步編程模型的延時實現(xiàn)方式,它具有異步特性,不會阻塞當前線程。Task.Delay方法返回一個Task對象,表示在指定的時間間隔后完成的異步操作。通常,它會配合async/await關(guān)鍵字一起使用,以實現(xiàn)異步延時的效果。

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.WriteLine("開始異步延時...");
        await Task.Delay(2000); // 異步延時2秒
        Console.WriteLine("異步延時結(jié)束");
    }
}

在上述代碼中,await Task.Delay(2000)會啟動一個異步任務(wù),該任務(wù)會在 2 秒后完成。當執(zhí)行到這一行代碼時,方法會暫停執(zhí)行,但當前線程不會被阻塞,而是將控制權(quán)返回給調(diào)用者,調(diào)用者可以繼續(xù)執(zhí)行其他任務(wù)。2 秒后,Task.Delay任務(wù)完成,程序從await之后的代碼繼續(xù)執(zhí)行。

在 UI 應(yīng)用中,Task.Delay的優(yōu)勢尤為明顯。例如,在一個 WinForms 應(yīng)用程序中,當用戶點擊按鈕時,如果使用Thread.Sleep進行延時操作,界面會在延時期間凍結(jié),無法響應(yīng)用戶的任何操作;而使用Task.Delay,界面則可以保持響應(yīng),用戶可以繼續(xù)進行其他交互,極大地提升了用戶體驗。此外,在需要處理高并發(fā)的服務(wù)器應(yīng)用或者其他異步操作場景中,Task.Delay也能充分發(fā)揮其非阻塞的優(yōu)勢,提高系統(tǒng)資源的利用率和程序的整體性能。

使用 Timer 實現(xiàn)延時

除了上述兩種方式,還可以利用定時器來實現(xiàn)延時效果。以System.Timers.Timer為例,通過設(shè)置其Interval屬性和AutoReset屬性,可以實現(xiàn)單次觸發(fā)的延時操作。

using System;
using System.Timers;

class Program
{
    private static Timer timer;

    static void Main()
    {
        // 創(chuàng)建Timer對象
        timer = new System.Timers.Timer();

        // 設(shè)置間隔時間為3000毫秒(3秒)
        timer.Interval = 3000;

        // 設(shè)置AutoReset屬性為false,表示只執(zhí)行一次
        timer.AutoReset = false;

        // 綁定Elapsed事件
        timer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);

        // 啟用定時器
        timer.Enabled = true;

        Console.WriteLine("啟動定時器,開始延時...");

        Console.WriteLine("按Enter鍵退出程序...");
        Console.ReadLine();

        // 停止定時器
        timer.Stop();
        timer.Dispose();
    }

    // Elapsed事件處理函數(shù)
    private static void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
    {
        Console.WriteLine("延時結(jié)束,定時器觸發(fā)于:" + e.SignalTime);
    }
}

在這段代碼中,創(chuàng)建了一個System.Timers.Timer對象,設(shè)置其Interval為 3 秒,AutoResetfalse,這樣定時器只會觸發(fā)一次。當定時器啟動后,經(jīng)過 3 秒,會觸發(fā)Elapsed事件,執(zhí)行OnTimedEvent方法中的代碼,實現(xiàn)了延時 3 秒后執(zhí)行特定操作的效果。

各種延時方法對比與選擇

從是否阻塞線程的角度來看,Thread.Sleep會阻塞當前線程,在延時期間線程無法執(zhí)行其他任務(wù);而Task.Delay和利用定時器實現(xiàn)的延時不會阻塞線程,線程可以在延時期間繼續(xù)執(zhí)行其他操作。

在是否適用于 UI 方面,Thread.Sleep不適合在 UI 線程中使用,否則會導(dǎo)致界面卡頓;Task.Delay則非常適合在 UI 應(yīng)用中實現(xiàn)延時操作,能夠保持界面的響應(yīng)性;使用定時器實現(xiàn)延時,如果需要操作 UI,需要注意跨線程問題,可通過設(shè)置SynchronizingObject屬性等方式來確保線程安全。

在選擇延時方法時,如果是簡單的控制臺應(yīng)用程序,對線程執(zhí)行順序有嚴格要求,且不需要線程在延時期間執(zhí)行其他任務(wù),可以選擇Thread.Sleep;如果是在 UI 應(yīng)用程序或者需要處理高并發(fā)的異步操作場景中,為了保持界面響應(yīng)性或提高系統(tǒng)資源利用率,應(yīng)優(yōu)先選擇Task.Delay;如果需要實現(xiàn)更復(fù)雜的定時任務(wù),包括循環(huán)觸發(fā)或單次觸發(fā)等,可以考慮使用定時器來實現(xiàn)延時效果。

實戰(zhàn)案例:打造定時數(shù)據(jù)采集程序

需求分析

在實際的項目開發(fā)中,定時采集數(shù)據(jù)并存儲是一個非常常見的需求。例如,在工業(yè)自動化領(lǐng)域,我們需要定時采集各種傳感器的數(shù)據(jù),以便對生產(chǎn)過程進行實時監(jiān)控和分析;在物聯(lián)網(wǎng)項目中,需要定時從各種智能設(shè)備中采集數(shù)據(jù),用于數(shù)據(jù)分析和業(yè)務(wù)決策。

本案例的目標是實現(xiàn)一個定時數(shù)據(jù)采集程序,能夠按照設(shè)定的時間間隔從指定的數(shù)據(jù)源采集數(shù)據(jù),并將采集到的數(shù)據(jù)存儲到本地文件或數(shù)據(jù)庫中,為后續(xù)的數(shù)據(jù)分析和處理提供基礎(chǔ)。

技術(shù)選型

為了實現(xiàn)這個定時數(shù)據(jù)采集程序,我們可以選擇使用System.Threading.Timer來實現(xiàn)定時任務(wù),因為它基于線程池工作,具有較高的執(zhí)行效率,適合在后臺長時間運行的任務(wù)。同時,使用Task.Delay來實現(xiàn)一些簡單的延時操作,以滿足在數(shù)據(jù)采集過程中的一些特殊時間控制需求。

在數(shù)據(jù)存儲方面,我們可以選擇使用文件系統(tǒng)來存儲數(shù)據(jù),將采集到的數(shù)據(jù)以文本文件的形式保存到本地磁盤,這種方式簡單直觀,適合數(shù)據(jù)量較小的場景;如果數(shù)據(jù)量較大或?qū)?shù)據(jù)管理和查詢有更高的要求,也可以選擇使用數(shù)據(jù)庫,如 SQLite、MySQL 等,這里我們先以文件存儲為例進行演示。

代碼實現(xiàn)

下面是一個使用System.Threading.Timer實現(xiàn)定時數(shù)據(jù)采集并存儲到文件的示例代碼:

using System;
using System.IO;
using System.Threading;

class DataCollector
{
    private static Timer timer;
    private static string filePath = "data.txt";

    static void Main()
    {
        // 定義回調(diào)函數(shù)
        TimerCallback callback = new TimerCallback(CollectData);

        // 創(chuàng)建Timer實例,設(shè)置啟動時間為0,間隔時間為5000毫秒(5秒)
        timer = new System.Threading.Timer(callback, null, 0, 5000);

        Console.WriteLine("數(shù)據(jù)采集程序已啟動,按任意鍵停止...");
        Console.ReadKey();

        // 停止定時器
        timer.Dispose();
        Console.WriteLine("數(shù)據(jù)采集程序已停止");
    }

    // 回調(diào)函數(shù),用于采集數(shù)據(jù)并存儲
    private static void CollectData(object state)
    {
        // 模擬數(shù)據(jù)采集,這里使用當前時間作為采集數(shù)據(jù)
        string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

        // 將數(shù)據(jù)存儲到文件中
        using (StreamWriter sw = File.AppendText(filePath))
        {
            sw.WriteLine(data);
        }

        Console.WriteLine($"采集到數(shù)據(jù):{data} 并已存儲到文件");
    }
}

在上述代碼中,首先在Main方法中創(chuàng)建了一個System.Threading.Timer實例,設(shè)置其回調(diào)函數(shù)為CollectData,首次執(zhí)行時間為 0(即立即執(zhí)行),執(zhí)行間隔為 5 秒。在CollectData回調(diào)函數(shù)中,模擬采集數(shù)據(jù)(這里使用當前時間作為數(shù)據(jù)),并將數(shù)據(jù)追加寫入到名為data.txt的文件中。

到此這篇關(guān)于C#定時器與延時操作的使用的文章就介紹到這了,更多相關(guān)C#定時器與延時操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • unity shader 較完整光照(含有多光源陰影)

    unity shader 較完整光照(含有多光源陰影)

    這篇文章主要介紹了unity shader 較完整光照(含有多光源陰影),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C# HttpClient 如何使用 Consul 發(fā)現(xiàn)服務(wù)

    C# HttpClient 如何使用 Consul 發(fā)現(xiàn)服務(wù)

    這篇文章主要介紹了C# HttpClient 如何使用 Consul 發(fā)現(xiàn)服務(wù),幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • c# 使用Task實現(xiàn)非阻塞式的I/O操作

    c# 使用Task實現(xiàn)非阻塞式的I/O操作

    這篇文章主要介紹了c# 使用Task實現(xiàn)非阻塞式的I/O操作,幫助大家更好的理解和學(xué)習(xí)c# 編程語言,感興趣的朋友可以了解下
    2020-11-11
  • C#提取PDF表單數(shù)據(jù)的實現(xiàn)流程

    C#提取PDF表單數(shù)據(jù)的實現(xiàn)流程

    PDF表單是一種常見的數(shù)據(jù)收集工具,廣泛應(yīng)用于調(diào)查問卷、業(yè)務(wù)合同等場景,憑借出色的跨平臺兼容性和標準化特點,PDF表單在各行各業(yè)中得到了廣泛應(yīng)用,本文將探討如何使用C# 實現(xiàn)自動化PDF表單數(shù)據(jù)提取流程,需要的朋友可以參考下
    2025-01-01
  • C#通過經(jīng)緯度計算2個點之間距離的實現(xiàn)代碼

    C#通過經(jīng)緯度計算2個點之間距離的實現(xiàn)代碼

    這篇文章主要介紹了C#通過經(jīng)緯度計算2個點之間距離實現(xiàn)代碼,本文對實現(xiàn)原理、經(jīng)緯度基本知識等一并做了講解,需要的朋友可以參考下
    2014-08-08
  • C#?線程切換后上下文都去了哪里(.NET高級調(diào)試分析)

    C#?線程切換后上下文都去了哪里(.NET高級調(diào)試分析)

    總會有一些朋友問一個問題,在 Windows 中線程做了上下文切換,請問被切的線程他的寄存器上下文都去了哪里?這個問題其實比較底層,如果對操作系統(tǒng)沒有個體系層面的理解以及做過源碼分析,其實很難說明白,這篇我們就從.NET高級調(diào)試的角度分析,需要的朋友可以參考下
    2023-12-12
  • C#算法之實現(xiàn)阿姆斯特朗數(shù)

    C#算法之實現(xiàn)阿姆斯特朗數(shù)

    這篇文章介紹了C#實現(xiàn)阿姆斯特朗數(shù)的算法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • C#中Dictionary類使用實例

    C#中Dictionary類使用實例

    這篇文章主要介紹了C#中Dictionary類使用實例,本文直接給出一個使用實例,包含一些Dictionary的基本用法,需要的朋友可以參考下
    2015-06-06
  • C#檢測移動硬盤并獲取移動硬盤盤符的方法

    C#檢測移動硬盤并獲取移動硬盤盤符的方法

    這篇文章主要介紹了利用C#檢測移動硬盤并獲取移動硬盤盤符
    2017-12-12
  • C#實現(xiàn)備忘錄功能

    C#實現(xiàn)備忘錄功能

    這篇文章主要為大家詳細介紹了C#實現(xiàn)備忘錄功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論

咸宁市| 徐汇区| 观塘区| 寿宁县| 甘洛县| 怀来县| 平潭县| 兴隆县| 同仁县| 正蓝旗| 阳泉市| 五峰| 深州市| 静乐县| 北辰区| 墨玉县| 潼南县| 涡阳县| 隆安县| 公主岭市| 华安县| 麦盖提县| 屯门区| 山东省| 东兴市| 静乐县| 桂东县| 新建县| 平安县| 五河县| 肃北| 鹤峰县| 邵东县| 尼勒克县| 福建省| 西宁市| 延寿县| 彭州市| 榆林市| 柳江县| 谢通门县|