.NET 幫助

C# 等待秒數(開發人員如何操作)

發佈 2024年8月15日
分享:

在程式設計中,有時您會希望暫停或延遲程式碼的執行一段時間。這樣可以模擬不同的時間條件,優先處理某些任務,在不阻塞主執行緒的情況下執行其他任務,等等。

在本指南中,我們將解釋如何在 C# 中進行等待,包括非同步方法、sleep 命令、sleep 函數和控制台應用程式,以及如何在我們領先業界的 PDF 生成工具 IronPDF 中包含等待功能。

如何在C#中等待任務

睡眠指令

‘Sleep’ 是一個簡單卻強大的指令,它允許您將當前任務的執行暫停一段特定的時間,本質上是告訴您的程序在繼續下一個任務之前等待。在 C# 中,我們透過使用 Thread.Sleep 來完成这一操作。(毫秒) 方法,如以下程式碼範例所示:

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
VB   C#

程式一開始會在使用 Thread.Sleep 方法暫停 3000 毫秒之前,先在控制台打印「Starting the program...」。 (或三秒钟)在指定的延遲後,程序恢復並在控制台上列印輸出 "...程序在 3 秒後繼續"。

非同步方法和任務

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);
       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);
       Console.WriteLine($"Task completed after {milliseconds} milliseconds");
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

在此代碼範例中,我們有兩個任務同時運行。DoSomethingAsync方法接受一個整數參數,表示該任務應延遲的時間(以毫秒為單位)。 (如你所見,程式碼中的‘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
VB   C#

在上述範例中,我們創建了一個間隔為1秒的計時器。每次計時到期時都會執行 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));
   }
}
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));
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

此處,CustomWaitAsync 方法接受一個表示延遲時間的 int 參數(以毫秒為單位)。該方法使用一個異步委託在新任務中運行 Thread.Sleep 函數,確保當前任務狀態在等待期間被阻止,但不會阻止主線程。

選擇正確的等待策略

現在我們已經介紹了 C# 的等待語句、休眠命令、異步方法、計時器和自定義等待函數,了解何時使用每種技術至關重要。以下是快速總結:

  • 當您需要簡單的方式暫停代碼執行指定時間時,使用 Thread.Sleep 函數
  • 當您需要同時執行多個任務而不阻塞主線程時,使用異步方法和任務
  • 當您需要在指定間隔執行特定任務時,使用計時器
  • 當您有內建方法無法滿足的特定需求時,創建自定義等待函數

使用 Wait 函數生成 PDF 文件

IronPDF 是一個專為網頁開發人員設計的輕量級 .NET PDF 庫。它使閱讀、編寫和操作 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");
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

IronPDF 可以無縫集成到您的等待策略中,在執行任務後、計劃間隔期間或當前執行緒恢復執行時生成 PDF 文件。

例如,您可以將 IronPDF 與異步方法結合使用,在從資料庫獲取數據後生成 PDF 報告,而不會阻塞主執行緒。同樣,您可以使用計時器類定期創建應用程序數據的 PDF 快照。

安裝 IronPDF 函式庫

IronPDF 很容易使用,但安裝起來更是簡單。有幾種方式可以進行:

方法一:NuGet 套件管理器主控台

在 Visual Studio 中,在方案總管中右擊 參考,然後點擊 管理 NuGet 套件。點擊瀏覽並搜索 'IronPDF',然後安裝最新版本。如果看到此畫面,表示功能正常:

您還可以前往工具 -> NuGet 套件管理員 -> 套件管理員主控台,然後在套件管理員標籤中輸入以下行:

Install-Package IronPdf

最後,您可以直接從 NuGet 官方網站從頁面右側的菜單中選擇下載軟體包選項,雙擊您的下載進行自動安裝,並重新載入解決方案以在您的項目中使用它。

沒有成功?您可以在我們的網站上找到特定平台的幫助。 進階 NuGet 安裝頁面.

方法二:使用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");
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

在這裡,我們使用 Task.Delay 方法等待 3 秒後生成 PDF。待等待完成後,該 PDF 將被保存為 "HelloWorld.pdf" 在應用程式的工作目錄中。

這就是最終產品:

使用 IronPDF 的等待方法

在 C# 應用程式中,您可以有效地使用暫停功能來管理當前執行緒和 CPU 時間,同時執行如將數據加載到 DataTable 或使用 IronPDF 生成 PDF 報告的操作。

結論

一開始這可能看起來不直觀,但在您的代碼中實現等待語句是構建高效應用程序時必備的技能。而通過整合 IronPDF,您可以即時創建 PDF 文件,而不會阻塞主線程,將您的應用程序提升到一個新水平。

準備好開始使用 IronPDF 了嗎?您可以從我們的 30 天免費試用它也可以完全免費用於開發目的,讓您可以真正了解它的性能。如果您喜歡所見,IronPDF的價格低至 $749欲享受更多優惠,請查看 Iron Suite 在這裡,您可以以兩個的價格獲得全部九個Iron Software工具。祝編程愉快!

< 上一頁
Razor C#(開發者如何運作)
下一個 >
C# for 迴圈(開發人員如何運作)

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >