.NET幫助 C# 等待數秒(開發者的工作原理) Curtis Chau 更新日期:8月 31, 2025 Download IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 在程式設計中,有時候你會希望暫停或延遲程式碼的執行一段時間。這是為了模擬不同的時間條件、優先處理某些任務、執行其他任務而不阻塞主線程等等。 在本指南中,我們會解釋如何在 C# 中等待,包括非同步方法、睡眠命令、睡眠函數、控制台應用程式,以及如何在我們行業領先的 PDF 生成工具 IronPDF 中包含等待功能。 如何在 C# 中等待任務 睡眠命令 'Sleep'是一個簡單而強大的命令,允許你暫停當前任務的執行一段特定時間,基本上告訴你的程式在繼續下一個任務之前等待。 在 C# 中,我們通過使用 Thread.Sleep(int milliseconds) 方法來做到這一點,如以下代碼示例所示: using System; using System.Threading; class Program { public static void Main() { Console.WriteLine("Starting the program..."); Thread.Sleep(3000); // Sleep for 3 seconds Console.WriteLine("...Program continues after 3 seconds"); } } using System; using System.Threading; class Program { public static void Main() { Console.WriteLine("Starting the program..."); Thread.Sleep(3000); // Sleep for 3 seconds Console.WriteLine("...Program continues after 3 seconds"); } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 在這裡,程式開始時在控制台上打印"Starting the program...",然後使用Thread.Sleep方法暫停 3,000 毫秒(或三秒)。 在指定的延遲時間後,程式繼續執行,並在控制台上打印"...Program continues after 3 seconds"。 非同步方法和任務 C# 中的非同步方法使你可以同時執行多個任務而不干擾主線程。 這意味著在一個任務等待的同時,其他任務可以繼續運行。 要實現非同步方法,你需要使用 async 關鍵字和 Task 類。 using System; using System.Threading.Tasks; class Program { public static async Task Main() { Console.WriteLine("Starting Task 1..."); var task1 = DoSomethingAsync(3000); Console.WriteLine("Starting Task 2..."); var task2 = DoSomethingAsync(2000); await Task.WhenAll(task1, task2); Console.WriteLine("Both tasks completed."); } private static async Task DoSomethingAsync(int milliseconds) { await Task.Delay(milliseconds); // Asynchronously wait without blocking the main thread Console.WriteLine($"Task completed after {milliseconds} milliseconds"); } } using System; using System.Threading.Tasks; class Program { public static async Task Main() { Console.WriteLine("Starting Task 1..."); var task1 = DoSomethingAsync(3000); Console.WriteLine("Starting Task 2..."); var task2 = DoSomethingAsync(2000); await Task.WhenAll(task1, task2); Console.WriteLine("Both tasks completed."); } private static async Task DoSomethingAsync(int milliseconds) { await Task.Delay(milliseconds); // Asynchronously wait without blocking the main thread Console.WriteLine($"Task completed after {milliseconds} milliseconds"); } } Imports System Imports System.Threading.Tasks Friend Class Program Public Shared Async Function Main() As Task Console.WriteLine("Starting Task 1...") Dim task1 = DoSomethingAsync(3000) Console.WriteLine("Starting Task 2...") Dim task2 = DoSomethingAsync(2000) Await Task.WhenAll(task1, task2) Console.WriteLine("Both tasks completed.") End Function Private Shared Async Function DoSomethingAsync(ByVal milliseconds As Integer) As Task Await Task.Delay(milliseconds) ' Asynchronously wait without blocking the main thread Console.WriteLine($"Task completed after {milliseconds} milliseconds") End Function End Class $vbLabelText $csharpLabel 在此代碼示例中,我們有兩個任務同時運行。DoSomethingAsync 方法接收一個int 參數,表示任務應延遲的時間(如代碼中的3000和2000,都是一個超時值)。 Task.Delay 方法類似於 Thread.Sleep() 方法,但它適用於非同步任務,且不會阻塞主線程。 使用計時器來安排你的任務 C# 中的計時器使你可以在特定時間間隔後執行特定的任務。 你可以使用 System.Timers.Timer 類來創建計時器。 以下是如何在控制台應用程式中使用計時器的示例: using System; using System.Timers; class Program { public static void Main() { var timer = new Timer(1000); // Create a timer with a 1-second interval timer.Elapsed += OnTimerElapsed; timer.AutoReset = true; timer.Enabled = true; Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } private static void OnTimerElapsed(object sender, ElapsedEventArgs e) { Console.WriteLine("Timer ticked at " + e.SignalTime); } } using System; using System.Timers; class Program { public static void Main() { var timer = new Timer(1000); // Create a timer with a 1-second interval timer.Elapsed += OnTimerElapsed; timer.AutoReset = true; timer.Enabled = true; Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } private static void OnTimerElapsed(object sender, ElapsedEventArgs e) { Console.WriteLine("Timer ticked at " + e.SignalTime); } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 在上面的示例中,我們創建了一個間隔為一秒的計時器。 OnTimerElapsed 方法在每次計時器滴答時執行。 我們將 AutoReset 屬性設置為 true,使計時器在每次滴答後自動重啟。 Enabled 屬性設置為 true 以啟動計時器。 當你運行這個控制台應用程式時,你會看到計時器每秒滴答一次,並將滴答時間打印到控制台上。 這個程式將繼續運行,直到你按下任何鍵退出。 創建自定義的等待功能 有時候,你可能需要一個自定義的等待功能來滿足代碼中的特定需求。 例如,你可能想創建一個只阻塞當前任務的等待功能,而不是整個線程。 你可以使用非同步委託來實現這一點。 以下是自定義等待功能的示例: using System; using System.Threading; using System.Threading.Tasks; class Program { public static async Task Main() { Console.WriteLine("Starting Task 1..."); await CustomWaitAsync(3000); Console.WriteLine("Task 1 completed."); Console.WriteLine("Starting Task 2..."); await CustomWaitAsync(2000); Console.WriteLine("Task 2 completed."); } private static async Task CustomWaitAsync(int milliseconds) { await Task.Run(() => Thread.Sleep(milliseconds)); // Run in a separate task to avoid blocking the main thread } } using System; using System.Threading; using System.Threading.Tasks; class Program { public static async Task Main() { Console.WriteLine("Starting Task 1..."); await CustomWaitAsync(3000); Console.WriteLine("Task 1 completed."); Console.WriteLine("Starting Task 2..."); await CustomWaitAsync(2000); Console.WriteLine("Task 2 completed."); } private static async Task CustomWaitAsync(int milliseconds) { await Task.Run(() => Thread.Sleep(milliseconds)); // Run in a separate task to avoid blocking the main thread } } Imports System Imports System.Threading Imports System.Threading.Tasks Friend Class Program Public Shared Async Function Main() As Task Console.WriteLine("Starting Task 1...") Await CustomWaitAsync(3000) Console.WriteLine("Task 1 completed.") Console.WriteLine("Starting Task 2...") Await CustomWaitAsync(2000) Console.WriteLine("Task 2 completed.") End Function Private Shared Async Function CustomWaitAsync(ByVal milliseconds As Integer) As Task Await Task.Run(Sub() Thread.Sleep(milliseconds)) ' Run in a separate task to avoid blocking the main thread End Function End Class $vbLabelText $csharpLabel 在這裡,CustomWaitAsync 方法接收一個代表以毫秒為單位的延遲時間的int參數。 該方法使用非同步委託在一個新任務中運行Thread.Sleep函數,確保當前任務狀態在等待時被阻塞,但不阻礙主線程。 選擇正確的等待策略 現在我們已經涵蓋了 C# 中的等待語句、睡眠命令、非同步方法、計時器和自定義等待功能,了解何時使用每種技術至關重要。 以下是一個簡要總結: 當你需要簡單地暫停代碼執行的一段指定時間時,使用 Thread.Sleep 函數。 當你需要同時執行多個任務而不阻止主線程時,使用非同步方法和任務。 當你需要在指定時間間隔執行某一特定任務時,使用計時器。 當內置方法不能滿足你的特定要求時,創建自定義等待功能。 使用等待功能生成 PDF 以及 IronPDF IronPDF 是一款輕量級 .NET PDF 庫,專為 web 開發者設計。 它使讀取、寫入和操作 PDF 文件變得簡單,可以將各種類型的文件轉換為 PDF 內容,您可以將其用於桌面和網頁的 .NET 專案中。 最好的部分 - 在開發環境中試用是免費的。 讓我們開始吧。 IronPDF 可處理 HTML 文件、URL、原始字符串和 ZIP 文件。 以下是代碼的快速概覽: 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"); } } Imports IronPdf Friend Class Program Shared Sub Main(ByVal args() As String) Dim renderer = New ChromePdfRenderer() ' 1. Convert HTML String to PDF Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>" Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent) pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf") ' 2. Convert HTML File to PDF Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath) pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf") ' 3. Convert URL to PDF Dim url = "http://ironpdf.com" ' Specify the URL Dim pdfFromUrl = renderer.RenderUrlAsPdf(url) pdfFromUrl.SaveAs("URLToPDF.pdf") End Sub End Class $vbLabelText $csharpLabel IronPDF 可以無縫集成你的等待策略,以在執行任務、安排的時間間隔後或當前線程恢復執行時生成 PDF 文檔。 例如,你可以將 IronPDF 與非同步方法結合使用,在從數據庫中獲取資料後生成 PDF 報告,而不阻塞主線程。 同樣,你可以使用計時器類在規定的時間間隔內建立應用程式數據的 PDF 快照。 安裝 IronPDF 標簽庫 IronPDF 使用簡便,安裝更加容易。 有幾種方法可以安裝: 方法 1:NuGet 套件管理控制台 在 Visual Studio 中,於方案管理器上右鍵單擊 參考,然後點擊 管理 NuGet 套件。 點擊瀏覽並搜索 'IronPDF',然後安裝最新版本。 如果你看到這個,表示它在運行: 你也可以前往工具 -> NuGet 套件管理器 -> 套件管理器控制台,並在套件管理器頁籤輸入以下行: Install-Package IronPdf 最後,你可以從 NuGet 的官方網站 直接獲取 IronPDF。 從頁面右側選單選擇下載套件選項,雙擊你的下載來自動安裝,然後重新載入方案以在你的項目中開始使用它。 沒有效果? 你可以在我們的高級NuGet安裝頁面上找到特定平台的幫助。 方法 2:使用 DLL 文件 你還可以直接從我們這裡獲取 IronPDF DLL 文件並手動添加到 Visual Studio 中。 有關完整的指導和 Windows、MacOS 和 Linux DLL 套件的鏈接,請查看我們的專用安裝頁面。 如何在 IronPDF 中使用 C# 等待 你可以在以下示例中看到如何在 IronPDF 中包含等待功能: using System; using System.Threading.Tasks; using System.Diagnostics; using IronPdf; class Program { public static async Task Main() { Console.WriteLine("Starting the PDF generation task..."); Stopwatch stopwatch = Stopwatch.StartNew(); await Task.Delay(3000); // Wait for 3 seconds GeneratePdf(); Console.WriteLine("PDF generated successfully."); } private static void GeneratePdf() { var htmlToPdf = new ChromePdfRenderer(); var pdf = htmlToPdf.RenderHtmlAsPdf("<h1>Hello, World!</h1>"); pdf.SaveAs("HelloWorld.pdf"); } } using System; using System.Threading.Tasks; using System.Diagnostics; using IronPdf; class Program { public static async Task Main() { Console.WriteLine("Starting the PDF generation task..."); Stopwatch stopwatch = Stopwatch.StartNew(); await Task.Delay(3000); // Wait for 3 seconds GeneratePdf(); Console.WriteLine("PDF generated successfully."); } private static void GeneratePdf() { var htmlToPdf = new ChromePdfRenderer(); var pdf = htmlToPdf.RenderHtmlAsPdf("<h1>Hello, World!</h1>"); pdf.SaveAs("HelloWorld.pdf"); } } Imports System Imports System.Threading.Tasks Imports System.Diagnostics Imports IronPdf Friend Class Program Public Shared Async Function Main() As Task Console.WriteLine("Starting the PDF generation task...") Dim stopwatch As Stopwatch = System.Diagnostics.Stopwatch.StartNew() Await Task.Delay(3000) ' Wait for 3 seconds GeneratePdf() Console.WriteLine("PDF generated successfully.") End Function Private Shared Sub GeneratePdf() Dim htmlToPdf = New ChromePdfRenderer() Dim pdf = htmlToPdf.RenderHtmlAsPdf("<h1>Hello, World!</h1>") pdf.SaveAs("HelloWorld.pdf") End Sub End Class $vbLabelText $csharpLabel 在這裡,我們使用 Task.Delay 方法等待 3 秒,然後生成 PDF。 PDF 然後以"HelloWorld.pdf"的名稱保存在應用程序的工作目錄中,一旦等待完成。 這是最終產品: 使用等待方法與 IronPDF 在 C# 應用程式中,你可以有效地使用睡眠功能來管理當前線程和 CPU 時間,從而在執行諸如將數據加載到 DataTable 或使用 IronPDF 生成 PDF 報告等操作時提高效率。 結論 一開始可能看起來不合直觀,但將等待語句加入代碼是建立高效率應用程序時的必備技能。 通過集成 IronPDF,你可以在不阻塞主線程的情況下即時生成 PDF 文檔,進一步提升你的應用程序。 準備好試用 IronPDF 嗎? 您可以從我們的30 天免費試用開始。 它的開發用途完全免費,因此您可以真正看到它的作用。 如果你喜歡看到的結果,IronPDF 起價僅為 $799。 如果想獲得更多折扣,請查看 Iron Suite,你可以享受以兩種工具的價格獲得九種 Iron Software 工具。 祝您編程愉快! 常見問題解答 如何在 C# 中延遲 PDF 渲染? 在 C# 中,您可以使用 `Thread.Sleep` 方法來同步等待,或使用 `Task.Delay` 來進行異步等待。這些方法允許您暫停代碼執行指定時間,確保任務在正確的時間執行。 C# 中的 WaitFor 類別是什麼? C# 中的 WaitFor 類別用於在代碼中實現各種等待策略。它提供了像 `Thread.Sleep` 和 `Task.Delay` 這樣的方法來幫助管理任務執行時間,使開發人員能夠根據需要暫停代碼執行。 如何在 C# 中實現 PDF 任務的異步等待? 在 C# 中可以使用 `Task.Delay` 方法來實現異步等待,這樣可以在不阻塞主執行緒的情況下進行等待。這對於 PDF 任務尤為有用,以確保平滑的執行和適當的任務調度。 計時器在 C# 中的任務執行管理中扮演什麼角色? 計時器,如 `System.Timers.Timer` 類別提供的那些,允許您在特定間隔預定任務。它們在需定期執行任務(如 PDF 生成)時非常有用,確保高效的任務管理,而不會阻塞主執行緒。 可以在 C# 中創建自定義等待函數嗎? 是的,您可以使用異步委託在 C# 中創建自定義等待函數。這樣可以滿足特定需求的代碼執行暫停,特別是在預設的等待方法不夠時。 如何在 C# 中將 PDF 生成與等待策略整合? 您可以透過使用異步方法和計時器在 C# 中將 PDF 生成與等待策略整合。這確保 PDF 創建任務得以高效管理,允許時間表安排的執行而不擋住其他進程。 在 C# 中如何將 HTML 轉換為 PDF? 在 C# 中要將 HTML 轉換為 PDF,您可以使用像 IronPDF 這樣的庫。此庫提供將 HTML 字符串、URL 和文件高效轉換為 PDF 文件的方法。 使用 C# 中的異步方法有什麼好處? C# 中的異步方法提供並發任務執行的好處,通過允許多個任務並行執行而不阻塞主執行緒來提高應用程序效率。 如何在 .NET 專案中安裝 PDF 庫? 要在 .NET 專案中安裝 PDF 庫,您可以使用 Visual Studio 中的 NuGet 包管理器來搜索並安裝該庫。或者,您也可以下載該庫的 DLL 文件並手動添加到項目中。 在 C# 中是否有可能暫停 PDF 渲染的特定時間? 是的,您可以在 C# 中使用 `Thread.Sleep` 方法來進行同步暫停,或使用 `Task.Delay` 方法來進行異步暫停,這樣可以控制 PDF 生成任務的時機。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 相關文章 更新日期 9月 4, 2025 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新日期 9月 4, 2025 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 更新日期 8月 5, 2025 C#開關模式匹配(對開發者來說是如何工作的) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 Razor C#(開發者的工作原理)C# For 迴圈(開發者的工作...