.NET幫助 C# 計時器(對於開發者的運行原理) Jacob Mellor 更新:2025年7月28日 下載 IronPDF NuGet 下載 DLL 下載 Windows Installer 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 C# 中的 Timer 類別是強大的工具,可用於依指定時間間隔安排程式碼的執行。 無論您是開發 Windows 窗體應用程式還是控制台應用程序,請了解如何使用計時器都可以大幅增強應用程式的功能。 本教學將引導您了解在 C# 中使用計時器的基礎知識,包括如何設定計時器、處理計時器的事件以及確保計時器在您的應用程式中順利運作。 我們還將討論如何在 C# 應用程式中使用IronPDF實現 PDF 自動生成,以及如何使用 C# 中的計時器自動生成 PDF。 Introduction to Timer Classes in C C# 提供了多個計時器類,每個類別都適用於不同的任務和環境。 最常用的計時器類別是用於伺服器端計時器的System.Timers.Timer和用於 Windows 窗體應用程式的System.Windows.Forms.Timer 。 在使用計時器類別時,了解事件處理程序的作用至關重要,因為這些處理程序決定了計時器在每個重要時刻(例如滴答或經過的事件時間間隔)執行的操作。 設定新計時器 配置定時器的時間間隔是其運作的基礎,它決定了定時器事件處理程序的呼叫頻率,從而控制應用程式對時間敏感的功能的節奏。 要在 C# 應用程式中使用計時器,尤其是在開發 Windows 窗體應用程式時,首先需要將工具箱中的System.Windows.Forms.Timer元件新增至窗體上,或透過程式設計設定計時器物件以獲得更大的靈活性。 var timer = new System.Timers.Timer(); // Create a new timer timer.Interval = 2000; // Sets the timer interval to tick every 2 seconds var timer = new System.Timers.Timer(); // Create a new timer timer.Interval = 2000; // Sets the timer interval to tick every 2 seconds $vbLabelText $csharpLabel 這個簡單的設定會建立一個每 2 秒滴答一次的計時器。 但是,要使定時器執行操作,需要將其連接到事件處理程序。 處理已過期事件 透過將 Elapsed 事件處理程序附加到System.Timers.Timer的Elapsed事件,您可以確保應用程式可以在每個時間間隔執行任務,從而有效地回應基於時間的觸發器。 每次計時器的時間間隔到期時,都會觸發此事件。 您可以為此事件附加一個處理程序,以指定計時器滴答時應該發生什麼: timer.Elapsed += OnTimedEvent; timer.Elapsed += OnTimedEvent; $vbLabelText $csharpLabel 在上面的程式碼中, OnTimedEvent是你定義的一個方法,每當計時器的Elapsed事件被觸發時,都會呼叫該方法。 建立事件處理程序 在定義定時器事件處理程序時,您可以建立一個響應定時器滴答事件而執行的方法,從而可以精確控制按預定義時間間隔執行的操作。 計時器的Elapsed事件的處理程序通常如下所示: static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e) { Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}", e.SignalTime); } static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e) { Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}", e.SignalTime); } $vbLabelText $csharpLabel 此方法會在計時器到期時向控制台列印目前時間,以示範如何回應計時器事件。 啟動和停止計時器 設定計時器及其事件處理程序後,需要啟動計時器。 您可以透過將其Enabled屬性設為true或呼叫Start方法來實現這一點: timer.Enabled = true; // or timer.Start(); timer.Enabled = true; // or timer.Start(); $vbLabelText $csharpLabel 若要停止計時器,您可以將Enabled設定為false或呼叫Stop方法。 這對於防止應用程式在不需要時運行不必要的操作至關重要。 在 Windows 窗體應用程式中使用計時器 System.Windows.Forms.Timer是一個有價值的 Windows 窗體組件,旨在與 Windows 窗體應用程式的事件驅動模型無縫集成,從而在不影響用戶介面響應速度的情況下實現定期操作。 範例:向表單新增計時器 在 Windows 窗體應用程式中,您可以將計時器控制項從工具箱拖曳到窗體上,或像這樣以程式設計方式建立它: System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer(); myTimer.Interval = 1000; // 1 second interval myTimer.Tick += new EventHandler(TimerEventProcessor); myTimer.Start(); System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer(); myTimer.Interval = 1000; // 1 second interval myTimer.Tick += new EventHandler(TimerEventProcessor); myTimer.Start(); $vbLabelText $csharpLabel 這裡, TimerEventProcessor是一個事件處理程序,每次發生Tick事件時都會被調用,這類似於System.Timers.Timer中的Elapsed事件。 進階定時器管理 帶定時器的螺紋安全 使用定時器時,了解應用程式的線程模型至關重要。 System.Timers.Timer和System.Threading.Timer在執行緒池執行緒上執行其回呼函數,從而允許並行執行。 但是,如果您的回呼方法修改共享資料或與使用者介面元素交互,則可能會導致執行緒安全性問題。 若要從定時器的回呼安全地更新 UI 元素,必須使用特定於應用程式類型的技術(例如,在 Windows Forms 中使用Invoke或BeginInvoke )將回呼封送到 UI 執行緒。 高精度計時 對於需要高精度計時的應用(例如多媒體應用或遊戲), System.Diagnostics.Stopwatch類別可能比計時器更適合高精度測量經過的時間。 雖然Stopwatch類別本身不是計時器,但可以與計時器結合使用,以實現精確的時間測量。 實際案例 範例:實現倒數計時器 計時器的一個常見用途是創建倒數計時器。 這可以透過將定時器間隔設為一秒鐘(1000 毫秒),並在定時器每次用完時減少計數器來實現。 當計數器歸零時,計時器停止,表示倒數結束。 using System; namespace CountdownApp { class Program { static int countdownTime = 10; // Countdown from 10 seconds public static void Main(string[] args) // Main method { StartCountdown(); Console.ReadLine(); // Prevent console from closing immediately } static void StartCountdown() { var timer = new System.Timers.Timer(1000); // Tick every second timer.Elapsed += UpdateCountdown; timer.Enabled = true; } static void UpdateCountdown(Object source, System.Timers.ElapsedEventArgs e) { if (countdownTime > 0) { Console.WriteLine(countdownTime-- + " seconds remaining"); } else { Console.WriteLine("Countdown finished!"); ((System.Timers.Timer)source).Stop(); // Stop the timer } } } } using System; namespace CountdownApp { class Program { static int countdownTime = 10; // Countdown from 10 seconds public static void Main(string[] args) // Main method { StartCountdown(); Console.ReadLine(); // Prevent console from closing immediately } static void StartCountdown() { var timer = new System.Timers.Timer(1000); // Tick every second timer.Elapsed += UpdateCountdown; timer.Enabled = true; } static void UpdateCountdown(Object source, System.Timers.ElapsedEventArgs e) { if (countdownTime > 0) { Console.WriteLine(countdownTime-- + " seconds remaining"); } else { Console.WriteLine("Countdown finished!"); ((System.Timers.Timer)source).Stop(); // Stop the timer } } } } $vbLabelText $csharpLabel 以下是上述程式碼的輸出結果: 範例:安排定期資料庫檢查 可以使用定時器對資料庫執行定期檢查,例如查詢新資料或清理舊記錄。 此範例設定了一個定時器,每小時查詢一次資料庫: private static void SetupDatabaseCheckTimer() { var timer = new System.Timers.Timer(3600000); // Set to 1 hour timer.Elapsed += CheckDatabase; timer.Enabled = true; } private static void CheckDatabase(Object source, System.Timers.ElapsedEventArgs e) { // Perform database operations here Console.WriteLine("Database checked at " + e.SignalTime); } private static void SetupDatabaseCheckTimer() { var timer = new System.Timers.Timer(3600000); // Set to 1 hour timer.Elapsed += CheckDatabase; timer.Enabled = true; } private static void CheckDatabase(Object source, System.Timers.ElapsedEventArgs e) { // Perform database operations here Console.WriteLine("Database checked at " + e.SignalTime); } $vbLabelText $csharpLabel IronPDF簡介 IronPDF - 可輕鬆從 HTML 和 ASPX 生成 PDF,尤其因其能夠輕鬆地從 HTML 或 URL 生成 PDF 而備受讚譽,它本質上允許您的應用程式將任何HTML 內容"列印"為 PDF 文件。 這對於產生報告、發票或任何需要以標準化格式呈現的網頁內容都非常有用。 IronPDF也支援 CSS 樣式、 JavaScript和自訂字體等進階功能,確保產生的 PDF 檔案能夠保持網頁內容的完整性。 IronPDF的一個顯著特點是其HTML 轉 PDF功能,能夠保留佈局和樣式。 它可以產生網頁內容的 PDF 文件,非常適合用於報告、發票和文件。 HTML 檔案、URL 和 HTML 字串可以輕鬆轉換為 PDF。 using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); // 1. Convert HTML String to PDF var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"; var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent); pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf"); // 2. Convert HTML File to PDF var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath); pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf"); // 3. Convert URL to PDF var url = "http://ironpdf.com"; // Specify the URL var pdfFromUrl = renderer.RenderUrlAsPdf(url); pdfFromUrl.SaveAs("URLToPDF.pdf"); } } using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); // 1. Convert HTML String to PDF var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"; var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent); pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf"); // 2. Convert HTML File to PDF var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath); pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf"); // 3. Convert URL to PDF var url = "http://ironpdf.com"; // Specify the URL var pdfFromUrl = renderer.RenderUrlAsPdf(url); pdfFromUrl.SaveAs("URLToPDF.pdf"); } } $vbLabelText $csharpLabel 安裝IronPDF 您可以使用NuGet套件管理器安裝IronPDF,方法是執行以下命令: Install-Package IronPdf 例子 假設你需要產生一份每日更新的PDF格式報告,其中包含每天更新的數據。 為了簡單起見,我們將產生一個基本的 HTML 報告,並每 24 小時使用IronPDF將其轉換為 PDF。 在你的 C# 應用程式中,你將設定一個System.Timers.Timer ,使其每 24 小時觸發一次。 需要注意的是,間隔是以毫秒為單位設定的,因此 24 小時表示為 24 * 60 * 60 * 1000 毫秒。 using System; using System.Timers; using IronPdf; using Timer = System.Timers.Timer; class Program { static void Main(string[] args) { // Set up the timer for 24 hours Timer timer = new Timer(24 * 60 * 60 * 1000); timer.Elapsed += OnTimedEvent; timer.AutoReset = true; timer.Enabled = true; Console.WriteLine("Press Enter to exit the program."); Console.ReadLine(); } private static void OnTimedEvent(Object source, ElapsedEventArgs e) { GeneratePdfReport(); } private static void GeneratePdfReport() { var renderer = new HtmlToPdf(); var pdf = renderer.RenderHtmlAsPdf("<h1>Daily Report</h1><p>This is the automated daily report.</p>"); string outputPath = $"f:\\DailyReport_{DateTime.Now:yyyyMMdd}.pdf"; pdf.SaveAs(outputPath); Console.WriteLine($"Generated PDF report at {outputPath}"); } } using System; using System.Timers; using IronPdf; using Timer = System.Timers.Timer; class Program { static void Main(string[] args) { // Set up the timer for 24 hours Timer timer = new Timer(24 * 60 * 60 * 1000); timer.Elapsed += OnTimedEvent; timer.AutoReset = true; timer.Enabled = true; Console.WriteLine("Press Enter to exit the program."); Console.ReadLine(); } private static void OnTimedEvent(Object source, ElapsedEventArgs e) { GeneratePdfReport(); } private static void GeneratePdfReport() { var renderer = new HtmlToPdf(); var pdf = renderer.RenderHtmlAsPdf("<h1>Daily Report</h1><p>This is the automated daily report.</p>"); string outputPath = $"f:\\DailyReport_{DateTime.Now:yyyyMMdd}.pdf"; pdf.SaveAs(outputPath); Console.WriteLine($"Generated PDF report at {outputPath}"); } } $vbLabelText $csharpLabel 輸出 運行程式碼後,控制台將顯示以下輸出。 為了加快輸出速度,我修改了程式碼,使用了 10 秒的計時器。 以下是生成的PDF檔案: 結論 總而言之,將 C# 計時器與IronPDF集成,為在.NET應用程式中自動產生和管理 PDF 文件提供了一種強大的方法。 透過提供的範例,我們探討如何設定 C# 定時器以定期觸發 PDF 產生任務,無論是為了頻繁的測試目的還是為了按計劃產生報告。 使用 C# 定時器,我們可以精確控制與 PDF 相關的任務何時執行,從而實現定期更新、產生報告或任何需要按計劃進行的任務。 IronPDF透過提供一種簡單且有效率的方式來建立、操作和保存基於動態內容、HTML 甚至網頁的 PDF 文檔,從而增強了這項功能。 IronPDF提供許可資訊免費試用版,並提供許可證以獲得完整存取權限和支援。 這提供了一種經濟高效的方式,可以在.NET應用程式中實現全面的 PDF 功能。 常見問題解答 C#中有哪些主要的Timer類別? C#提供了幾種Timer類別,包括用於伺服器應用的System.Timers.Timer和用於Windows Forms應用的System.Windows.Forms.Timer,各自滿足不同的多執行緒和執行需求。 如何在 C# 中將 HTML 轉換為 PDF? 您可以使用IronPDF的RenderHtmlAsPdf方法將HTML轉換為PDF,此方法支援CSS和JavaScript等進階功能,非常適合生成報告和發票。 如何在C#應用中設置和管理Timer? 要在C#應用中設置Timer,需要創建一個Timer類別的實例,指定其間隔,然後將事件處理器附加到其Elapsed或Tick事件,以便定期執行程式碼。 在C#應用中使用Timer有什麼好處? C#中的Timer對於自動執行任務非常有用,例如安排定期的資料庫檢查、實現倒計時器和觸發自動化過程(如PDF生成)。 IronPDF如何在C#中自動化PDF生成? IronPDF可以通過使用C#的Timer在預定的間隔時間觸發PDF創建過程,例如生成每日報告或發票。 如何處理System.Timers.Timer的多執行緒問題? System.Timers.Timer在執行回調時使用執行緒池執行緒,這可能導致執行緒安全問題。適當的管理包括確保使用Invoke或BeginInvoke等技術將UI更新封送回UI執行緒。 如何從C#的Timer事件更新UI組件? 要從C#的Timer事件更新UI組件,必須將呼叫封送回UI執行緒,通常在Windows Forms應用中使用Invoke或BeginInvoke方法。 Timer如何增強C#應用的功能? Timer可以通過允許在特定間隔安排任務來增強功能,通過自動化提高應用的效率和響應能力。 如何在C#專案中安裝和使用IronPDF? IronPDF可以通過NuGet包管理器以此指令安裝:Install-Package IronPDF。安裝後,您可以使用其方法將HTML轉換為PDF並自動化PDF生成。 有哪些實際範例演示在C#中使用Timer? C#中Timer的實際範例包括實現倒計時器、安排定期的資料庫更新,以及使用IronPDF自動化每日的PDF報告生成。 Jacob Mellor 立即與工程團隊聊天 首席技術官 Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。 相關文章 更新2026年2月20日 銜接 CLI 簡化與 .NET : 使用 Curl DotNet 與 IronPDF for .NET Jacob Mellor 藉由 CurlDotNet 彌補了這方面的不足,CurlDotNet 是為了讓 .NET 生態系統能熟悉 cURL 而建立的函式庫。 閱讀更多 更新2025年12月20日 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新2025年12月20日 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 Graphql C#(對於開發者的運行原理)Math.Round C#(對於開發者的...
更新2026年2月20日 銜接 CLI 簡化與 .NET : 使用 Curl DotNet 與 IronPDF for .NET Jacob Mellor 藉由 CurlDotNet 彌補了這方面的不足,CurlDotNet 是為了讓 .NET 生態系統能熟悉 cURL 而建立的函式庫。 閱讀更多