C# 線程休眠方法(對於開發者的運行原理)
多執行緒是現代軟體開發中至關重要的方面,允許開發者同時執行多個任務,提高性能和回應速度。 然而,有效管理執行緒需要仔細考慮同步和協調。 在C#開發者的工具中,一個管理執行緒時機和協調的基本工具是Thread.Sleep()方法。
在本文中,我們將深入探討Thread.Sleep()方法的複雜性,探索其目的、用法、潛在陷阱及替代方案。 此外,在本文中,我們呈現了IronPDF C# PDF程式庫,它有助於以程式控制方式生成PDF文件。
理解Thread.Sleep()
TimeSpan物件提供,提供靈活性以表達想要的暫停時長。
using System;
using System.Threading;
class Program
{
static void Main()
{
// Using Thread.Sleep() with a specified number of milliseconds
Thread.Sleep(1000); // Block for 1 second
// Using Thread.Sleep() with TimeSpan
TimeSpan sleepDuration = TimeSpan.FromSeconds(2);
Thread.Sleep(sleepDuration); // Block for 2 seconds
}
}Imports System
Imports System.Threading
Friend Class Program
Shared Sub Main()
' Using Thread.Sleep() with a specified number of milliseconds
Thread.Sleep(1000) ' Block for 1 second
' Using Thread.Sleep() with TimeSpan
Dim sleepDuration As TimeSpan = TimeSpan.FromSeconds(2)
Thread.Sleep(sleepDuration) ' Block for 2 seconds
End Sub
End ClassImports System
Imports System.Threading
Friend Class Program
Shared Sub Main()
' Using Thread.Sleep() with a specified number of milliseconds
Thread.Sleep(1000) ' Block for 1 second
' Using Thread.Sleep() with TimeSpan
Dim sleepDuration As TimeSpan = TimeSpan.FromSeconds(2)
Thread.Sleep(sleepDuration) ' Block for 2 seconds
End Sub
End ClassThread.Sleep的目的
使用Thread.Sleep的主要目的是在執行緒的執行中引入延遲或暫停。 這在多種情境下非常有益,例如:
- 模擬實時行為: 在需要模擬實時行為的情境中,引入延遲可以幫助模擬系統正在建模的時間限制。
- 防止過度資源消耗: 在不必要持續執行時,暫停一個執行緒短暫時間可以避免不必要的資源消耗。
- 執行緒協調: 在處理多個執行緒時,引入暫停可以幫助同步它們的執行,防止競賽條件,確保有序處理。
實際範例
我們考慮一個實際範例,使用Thread.Sleep()方法來模擬交通燈控制系統。 在這個情境中,我們將建立一個簡單的控制台應用程式,模擬具有紅、黃、綠信號的交通燈行為。
using System;
using System.Threading;
public class TrafficLightSimulator
{
static void Main()
{
Console.WriteLine("Traffic Light Simulator");
while (true)
{
// Display the red light
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"Stop! Red light - {DateTime.Now:u}");
Thread.Sleep(5000); // Pause for 5 seconds
// Display the yellow light
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"Get ready! Yellow light - {DateTime.Now:u}");
Thread.Sleep(2000); // Pause for 2 seconds
// Display the green light
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"Go! Green light - {DateTime.Now:u}");
Thread.Sleep(5000); // Pause for 5 seconds
// Reset console color and clear screen
Console.ResetColor();
Console.Clear();
}
}
}using System;
using System.Threading;
public class TrafficLightSimulator
{
static void Main()
{
Console.WriteLine("Traffic Light Simulator");
while (true)
{
// Display the red light
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"Stop! Red light - {DateTime.Now:u}");
Thread.Sleep(5000); // Pause for 5 seconds
// Display the yellow light
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"Get ready! Yellow light - {DateTime.Now:u}");
Thread.Sleep(2000); // Pause for 2 seconds
// Display the green light
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"Go! Green light - {DateTime.Now:u}");
Thread.Sleep(5000); // Pause for 5 seconds
// Reset console color and clear screen
Console.ResetColor();
Console.Clear();
}
}
}Imports System
Imports System.Threading
Public Class TrafficLightSimulator
Shared Sub Main()
Console.WriteLine("Traffic Light Simulator")
Do
' Display the red light
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine($"Stop! Red light - {DateTime.Now:u}")
Thread.Sleep(5000) ' Pause for 5 seconds
' Display the yellow light
Console.ForegroundColor = ConsoleColor.Yellow
Console.WriteLine($"Get ready! Yellow light - {DateTime.Now:u}")
Thread.Sleep(2000) ' Pause for 2 seconds
' Display the green light
Console.ForegroundColor = ConsoleColor.Green
Console.WriteLine($"Go! Green light - {DateTime.Now:u}")
Thread.Sleep(5000) ' Pause for 5 seconds
' Reset console color and clear screen
Console.ResetColor()
Console.Clear()
Loop
End Sub
End ClassImports System
Imports System.Threading
Public Class TrafficLightSimulator
Shared Sub Main()
Console.WriteLine("Traffic Light Simulator")
Do
' Display the red light
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine($"Stop! Red light - {DateTime.Now:u}")
Thread.Sleep(5000) ' Pause for 5 seconds
' Display the yellow light
Console.ForegroundColor = ConsoleColor.Yellow
Console.WriteLine($"Get ready! Yellow light - {DateTime.Now:u}")
Thread.Sleep(2000) ' Pause for 2 seconds
' Display the green light
Console.ForegroundColor = ConsoleColor.Green
Console.WriteLine($"Go! Green light - {DateTime.Now:u}")
Thread.Sleep(5000) ' Pause for 5 seconds
' Reset console color and clear screen
Console.ResetColor()
Console.Clear()
Loop
End Sub
End Class在上面的程式範例中,我們在while迴圈中有一個簡單的交通燈模擬。使用Thread.Sleep()方法在交通燈信號的轉換之間引入延遲。 以下是範例的工作方式:
- 程式進入無限迴圈以模擬持續運行。
- 紅燈顯示5秒,表示停止信號。
- 5秒後,黃燈顯示2秒,表示準備階段。
- 最後,綠燈顯示5秒,允許車輛通行。
- 控制台顏色重設,迴圈重複。
輸出

此範例演示了如何使用Thread.Sleep()控制交通燈模擬的時機,提供一種簡單的方式來模擬實際系統的行為。 請記住,這是一個供說明用的基本範例,而在更複雜的應用程式中,您可能會想探索更先進的執行緒和同步技術以處理使用者輸入、管理多個交通燈並確保準確的時機。
使用TimeSpan超時於睡眠方法
您可以使用Thread.Sleep()方法指定睡眠持續時間。 以下是從先前範例延期的交通燈模擬,使用TimeSpan的範例:
using System;
using System.Threading;
class TrafficLightSimulator
{
public static void Main()
{
Console.WriteLine("Traffic Light Simulator");
while (true)
{
// Display the red light
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"Stop! Red light - {DateTime.Now:u}");
Thread.Sleep(TimeSpan.FromSeconds(5)); // Pause for 5 seconds
// Display the yellow light
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"Get ready! Yellow light - {DateTime.Now:u}");
Thread.Sleep(TimeSpan.FromSeconds(2)); // Pause for 2 seconds
// Display the green light
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"Go! Green light - {DateTime.Now:u}");
Thread.Sleep(TimeSpan.FromSeconds(5)); // Pause for 5 seconds
// Reset console color and clear screen
Console.ResetColor();
Console.Clear();
}
}
}using System;
using System.Threading;
class TrafficLightSimulator
{
public static void Main()
{
Console.WriteLine("Traffic Light Simulator");
while (true)
{
// Display the red light
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"Stop! Red light - {DateTime.Now:u}");
Thread.Sleep(TimeSpan.FromSeconds(5)); // Pause for 5 seconds
// Display the yellow light
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"Get ready! Yellow light - {DateTime.Now:u}");
Thread.Sleep(TimeSpan.FromSeconds(2)); // Pause for 2 seconds
// Display the green light
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"Go! Green light - {DateTime.Now:u}");
Thread.Sleep(TimeSpan.FromSeconds(5)); // Pause for 5 seconds
// Reset console color and clear screen
Console.ResetColor();
Console.Clear();
}
}
}Imports System
Imports System.Threading
Friend Class TrafficLightSimulator
Public Shared Sub Main()
Console.WriteLine("Traffic Light Simulator")
Do
' Display the red light
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine($"Stop! Red light - {DateTime.Now:u}")
Thread.Sleep(TimeSpan.FromSeconds(5)) ' Pause for 5 seconds
' Display the yellow light
Console.ForegroundColor = ConsoleColor.Yellow
Console.WriteLine($"Get ready! Yellow light - {DateTime.Now:u}")
Thread.Sleep(TimeSpan.FromSeconds(2)) ' Pause for 2 seconds
' Display the green light
Console.ForegroundColor = ConsoleColor.Green
Console.WriteLine($"Go! Green light - {DateTime.Now:u}")
Thread.Sleep(TimeSpan.FromSeconds(5)) ' Pause for 5 seconds
' Reset console color and clear screen
Console.ResetColor()
Console.Clear()
Loop
End Sub
End ClassImports System
Imports System.Threading
Friend Class TrafficLightSimulator
Public Shared Sub Main()
Console.WriteLine("Traffic Light Simulator")
Do
' Display the red light
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine($"Stop! Red light - {DateTime.Now:u}")
Thread.Sleep(TimeSpan.FromSeconds(5)) ' Pause for 5 seconds
' Display the yellow light
Console.ForegroundColor = ConsoleColor.Yellow
Console.WriteLine($"Get ready! Yellow light - {DateTime.Now:u}")
Thread.Sleep(TimeSpan.FromSeconds(2)) ' Pause for 2 seconds
' Display the green light
Console.ForegroundColor = ConsoleColor.Green
Console.WriteLine($"Go! Green light - {DateTime.Now:u}")
Thread.Sleep(TimeSpan.FromSeconds(5)) ' Pause for 5 seconds
' Reset console color and clear screen
Console.ResetColor()
Console.Clear()
Loop
End Sub
End Class在這個修改的範例中,TimeSpan物件,代表所需的睡眠時間。 這使得程式碼更具可讀性和表現力。
透過在TimeSpan所支持的任何單位),提供一種更直觀的方式處理時間間隔。 這在處理您的應用程式中較長或更複雜的睡眠時間時特別有用。
使用案例
- 模擬實時行為: 考慮一個模擬應用程式,您需要模擬實時系統的行為。 通過將
Thread.Sleep()策略性地放置於您的程式碼中,您可以模擬實際系統中發生的時間延遲,增強模擬的準確性。
void SimulateRealTimeEvent()
{
// Simulate some event
}
void SimulateNextEvent()
{
// Simulate another event
}
// Simulating real-time behavior with Thread.Sleep()
SimulateRealTimeEvent();
Thread.Sleep(1000); // Pause for 1 second
SimulateNextEvent();void SimulateRealTimeEvent()
{
// Simulate some event
}
void SimulateNextEvent()
{
// Simulate another event
}
// Simulating real-time behavior with Thread.Sleep()
SimulateRealTimeEvent();
Thread.Sleep(1000); // Pause for 1 second
SimulateNextEvent();Private Sub SimulateRealTimeEvent()
' Simulate some event
End Sub
Private Sub SimulateNextEvent()
' Simulate another event
End Sub
' Simulating real-time behavior with Thread.Sleep()
SimulateRealTimeEvent()
Thread.Sleep(1000) ' Pause for 1 second
SimulateNextEvent()Private Sub SimulateRealTimeEvent()
' Simulate some event
End Sub
Private Sub SimulateNextEvent()
' Simulate another event
End Sub
' Simulating real-time behavior with Thread.Sleep()
SimulateRealTimeEvent()
Thread.Sleep(1000) ' Pause for 1 second
SimulateNextEvent()- 動畫和UI更新: 在圖形化網頁開發應用程式或遊戲開發中,流暢的動畫和UI更新至關重要。 可以使用
Thread.Sleep()控制幀率,確保更新以視覺上令人滿意的速度進行。
void UpdateUIElement()
{
// Code to update a UI element
}
void UpdateNextUIElement()
{
// Code to update the next UI element
}
// Updating UI with controlled delays
UpdateUIElement();
Thread.Sleep(50); // Pause for 50 milliseconds
UpdateNextUIElement();void UpdateUIElement()
{
// Code to update a UI element
}
void UpdateNextUIElement()
{
// Code to update the next UI element
}
// Updating UI with controlled delays
UpdateUIElement();
Thread.Sleep(50); // Pause for 50 milliseconds
UpdateNextUIElement();Private Sub UpdateUIElement()
' Code to update a UI element
End Sub
Private Sub UpdateNextUIElement()
' Code to update the next UI element
End Sub
' Updating UI with controlled delays
UpdateUIElement()
Thread.Sleep(50) ' Pause for 50 milliseconds
UpdateNextUIElement()Private Sub UpdateUIElement()
' Code to update a UI element
End Sub
Private Sub UpdateNextUIElement()
' Code to update the next UI element
End Sub
' Updating UI with controlled delays
UpdateUIElement()
Thread.Sleep(50) ' Pause for 50 milliseconds
UpdateNextUIElement()- 限制外部服務呼叫: 在與外部服務或API互動時,通常會設定速率限制或節流以防止過多的請求。 可以使用
Thread.Sleep()引入連續服務呼叫之間的延遲,以保持在速率限制範圍內。
void CallExternalService()
{
// Call to external service
}
void CallNextService()
{
// Call to another external service
}
// Throttling service calls with Thread.Sleep()
CallExternalService();
Thread.Sleep(2000); // Pause for 2 seconds before the next call
CallNextService();void CallExternalService()
{
// Call to external service
}
void CallNextService()
{
// Call to another external service
}
// Throttling service calls with Thread.Sleep()
CallExternalService();
Thread.Sleep(2000); // Pause for 2 seconds before the next call
CallNextService();Private Sub CallExternalService()
' Call to external service
End Sub
Private Sub CallNextService()
' Call to another external service
End Sub
' Throttling service calls with Thread.Sleep()
CallExternalService()
Thread.Sleep(2000) ' Pause for 2 seconds before the next call
CallNextService()Private Sub CallExternalService()
' Call to external service
End Sub
Private Sub CallNextService()
' Call to another external service
End Sub
' Throttling service calls with Thread.Sleep()
CallExternalService()
Thread.Sleep(2000) ' Pause for 2 seconds before the next call
CallNextService()Thread.Sleep()的優點
- 同步和協調:
Thread.Sleep()有助於同步執行緒執行,防止競賽條件,並確保在處理多個執行緒時有序處理。 - 資源節省: 在不需要持續執行的情景中暫停執行緒是有利的,可以節省系統資源。
- 簡單性和可讀性: 該方法提供一種簡單和可讀的方式來引入延遲,特別適合於多執行緒概念的新手開發者,使程式碼更易於理解。
潛在陷阱和考量
雖然Thread.Sleep()是引入延遲的簡單解決方案,但開發者應注意的潛在陷阱和考量包括:
- 阻塞執行緒: 當執行緒使用
Thread.Sleep()暫停時,它實際上是被阻塞的,在此期間無法執行其他工作。在響應速度非常重要的情境中,長時間阻塞主執行緒可能會導致不良的使用者體驗。 - 時間不準確: 暫停時間的準確性取決於底層操作系統的調度,可能不精確。開發者應小心當需要精準時間的地方依賴
Thread.Sleep()。 - 替代方法: 在現代C#開發中,類似
Thread.Sleep()。 這些方法提供更好的響應性,而不會阻止執行緒。
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
// Using Task.Delay() instead of Thread.Sleep()
await Task.Delay(1000); // Pause for 1 second asynchronously
}
}using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
// Using Task.Delay() instead of Thread.Sleep()
await Task.Delay(1000); // Pause for 1 second asynchronously
}
}Imports System
Imports System.Threading.Tasks
Friend Class Program
Shared Async Function Main() As Task
' Using Task.Delay() instead of Thread.Sleep()
Await Task.Delay(1000) ' Pause for 1 second asynchronously
End Function
End ClassImports System
Imports System.Threading.Tasks
Friend Class Program
Shared Async Function Main() As Task
' Using Task.Delay() instead of Thread.Sleep()
Await Task.Delay(1000) ' Pause for 1 second asynchronously
End Function
End Class介紹IronPDF
Iron Software推出的IronPDF是一個C# PDF程式庫,既可作為PDF生成器也可用於閱讀。 本節介紹基本功能。 更多詳情,請查閱IronPDF文件。
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");
}
}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 ClassImports 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安裝
要安裝用NuGet程式包管理器安裝IronPDF,可使用NuGet套件管理器控制台或Visual Studio套件管理器。
使用NuGet套件管理器控制台安裝IronPDF程式庫,可以使用以下命令之一:
使用Visual Studio套件管理器安裝IronPDF程式庫:

using System;
using IronPdf;
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public void DisplayFullName()
{
if (string.IsNullOrEmpty(FirstName) || string.IsNullOrEmpty(LastName))
{
LogError($"Invalid name: {nameof(FirstName)} or {nameof(LastName)} is missing.");
}
else
{
Console.WriteLine($"Full Name: {FirstName} {LastName}");
}
}
public void PrintPdf()
{
Console.WriteLine("Generating PDF using IronPDF.");
// Content to print to PDF
string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {FirstName}!</h1>
<p>First Name: {FirstName}</p>
<p>Last Name: {LastName}</p>
</body>
</html>";
// Create a new PDF document
var pdfDocument = new ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(content).SaveAs("person.pdf");
}
private void LogError(string errorMessage)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"Error: {errorMessage}");
Console.ResetColor();
}
}
class Program
{
public static void Main()
{
// Create an instance of the Person class
Person person = new Person();
// Attempt to display the full name
person.DisplayFullName();
// Set the properties
person.FirstName = "John"; // Set First Name
person.LastName = "Doe"; // Set Last Name
// Display the full name again
person.DisplayFullName();
Console.WriteLine("Pause for 2 seconds and Print PDF");
Thread.Sleep(2000); // Pause for 2 seconds
// Print the full name to PDF
person.PrintPdf();
}
}using System;
using IronPdf;
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public void DisplayFullName()
{
if (string.IsNullOrEmpty(FirstName) || string.IsNullOrEmpty(LastName))
{
LogError($"Invalid name: {nameof(FirstName)} or {nameof(LastName)} is missing.");
}
else
{
Console.WriteLine($"Full Name: {FirstName} {LastName}");
}
}
public void PrintPdf()
{
Console.WriteLine("Generating PDF using IronPDF.");
// Content to print to PDF
string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {FirstName}!</h1>
<p>First Name: {FirstName}</p>
<p>Last Name: {LastName}</p>
</body>
</html>";
// Create a new PDF document
var pdfDocument = new ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(content).SaveAs("person.pdf");
}
private void LogError(string errorMessage)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"Error: {errorMessage}");
Console.ResetColor();
}
}
class Program
{
public static void Main()
{
// Create an instance of the Person class
Person person = new Person();
// Attempt to display the full name
person.DisplayFullName();
// Set the properties
person.FirstName = "John"; // Set First Name
person.LastName = "Doe"; // Set Last Name
// Display the full name again
person.DisplayFullName();
Console.WriteLine("Pause for 2 seconds and Print PDF");
Thread.Sleep(2000); // Pause for 2 seconds
// Print the full name to PDF
person.PrintPdf();
}
}Imports System
Imports IronPdf
Friend Class Person
Public Property FirstName() As String
Public Property LastName() As String
Public Sub DisplayFullName()
If String.IsNullOrEmpty(FirstName) OrElse String.IsNullOrEmpty(LastName) Then
LogError($"Invalid name: {NameOf(FirstName)} or {NameOf(LastName)} is missing.")
Else
Console.WriteLine($"Full Name: {FirstName} {LastName}")
End If
End Sub
Public Sub PrintPdf()
Console.WriteLine("Generating PDF using IronPDF.")
' Content to print to PDF
Dim content As String = $"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {FirstName}!</h1>
<p>First Name: {FirstName}</p>
<p>Last Name: {LastName}</p>
</body>
</html>"
' Create a new PDF document
Dim pdfDocument = New ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf(content).SaveAs("person.pdf")
End Sub
Private Sub LogError(ByVal errorMessage As String)
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine($"Error: {errorMessage}")
Console.ResetColor()
End Sub
End Class
Friend Class Program
Public Shared Sub Main()
' Create an instance of the Person class
Dim person As New Person()
' Attempt to display the full name
person.DisplayFullName()
' Set the properties
person.FirstName = "John" ' Set First Name
person.LastName = "Doe" ' Set Last Name
' Display the full name again
person.DisplayFullName()
Console.WriteLine("Pause for 2 seconds and Print PDF")
Thread.Sleep(2000) ' Pause for 2 seconds
' Print the full name to PDF
person.PrintPdf()
End Sub
End ClassImports System
Imports IronPdf
Friend Class Person
Public Property FirstName() As String
Public Property LastName() As String
Public Sub DisplayFullName()
If String.IsNullOrEmpty(FirstName) OrElse String.IsNullOrEmpty(LastName) Then
LogError($"Invalid name: {NameOf(FirstName)} or {NameOf(LastName)} is missing.")
Else
Console.WriteLine($"Full Name: {FirstName} {LastName}")
End If
End Sub
Public Sub PrintPdf()
Console.WriteLine("Generating PDF using IronPDF.")
' Content to print to PDF
Dim content As String = $"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {FirstName}!</h1>
<p>First Name: {FirstName}</p>
<p>Last Name: {LastName}</p>
</body>
</html>"
' Create a new PDF document
Dim pdfDocument = New ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf(content).SaveAs("person.pdf")
End Sub
Private Sub LogError(ByVal errorMessage As String)
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine($"Error: {errorMessage}")
Console.ResetColor()
End Sub
End Class
Friend Class Program
Public Shared Sub Main()
' Create an instance of the Person class
Dim person As New Person()
' Attempt to display the full name
person.DisplayFullName()
' Set the properties
person.FirstName = "John" ' Set First Name
person.LastName = "Doe" ' Set Last Name
' Display the full name again
person.DisplayFullName()
Console.WriteLine("Pause for 2 seconds and Print PDF")
Thread.Sleep(2000) ' Pause for 2 seconds
' Print the full name to PDF
person.PrintPdf()
End Sub
End Class在這個程式中,我們演示如何使用Thread.Sleep和IronPDF。 程式碼首先驗證人物的LastName屬性。 然後在控制台上列印人物全名。 然後使用FullName列印為PDF。
輸出

生成的PDF

授權(提供免費試用)
要使用IronPDF,將此金鑰插入appsettings.json文件。
"IronPdf.LicenseKey": "your license key"
要接收試用授權,請提供您的電子郵件。 有關IronPDF的授權更多資訊,請存取此IronPDF授權頁面。
結論
C#中的Thread.Sleep()方法是管理執行緒時機和同步的基本工具。 雖然它是一個簡單且有效的引入延遲的解決方案,但開發者應注意它的限制及其對應用程式性能的潛在影響。 隨著現代C#開發的演變,探索類似Task.Delay()和非同步程式等替代方法成為撰寫響應迅速且高效的多執行緒應用程式所必需。 通過瞭解執行緒同步的細微差別並選擇適當的工具,開發者可以創造出符合動態環境中並發處理需求的強大且高效的軟體。
此外,我們觀察到IronPDF功能的多樣性,在生成PDF文件中以及如何與Thread.Sleep方法一起使用。 如需更多有關如何使用IronPDF的範例,請造訪它們的程式碼範例頁面IronPDF範例頁面。
Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。