フッターコンテンツにスキップ
.NETヘルプ

C# Wait For Seconds (開発者向けの仕組み)

プログラミングにおいて、コードの実行を一定時間一時停止または遅延させたいことがあります。これにより、異なる時間条件をシミュレートしたり、特定のタスクを優先したり、メインスレッドをブロックせずに他のタスクを実行したりすることができます。

このガイドでは、C#での待機方法を説明します。非同期メソッド、スリープコマンド、スリープ関数、コンソールアプリ、および私たちの業界をリードするPDF生成ツール、IronPDFでの待機関数の含め方について説明します。

C#でタスクを待つ方法

スリープコマンド

「スリープ」は、現在のタスクの実行を一定時間一時停止するシンプルでありながら強力なコマンドで、次のタスクに進む前にプログラムに待機するよう指示します。 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

ここでは、プログラムはコンソールに「プログラムを開始します...」と表示してからThread.Sleepメソッドを使って3,000ミリ秒(または3秒)一時停止します。 指定された遅延後、プログラムは再開し、コンソールに「...プログラムは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); // 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

このコード例では、同時に2つのタスクが実行されています。DoSomethingAsyncメソッドは、タスクが遅延するミリ秒数を表すintパラメータを取ります(コードの30002000で分かるように、どちらもタイムアウト値)。 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

上記の例では、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)); // 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関数を使用します。
  • メインスレッドをブロックせずに複数のタスクを同時に実行する必要がある場合は、非同期メソッドとタスクを使用します。
  • 特定の間隔で特定のタスクを実行する必要がある場合は、タイマーを使用します。
  • 組み込みメソッドでは満たされない特別な要件がある場合は、カスタム待機関数を作成します。

IronPDFを使った待機関数による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");
   }
}
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」を検索し、最新バージョンをインストールします。 これを見ると、動作しています。

Csharp Wait For Seconds 1 related to 方法1: NuGetパッケージマネージャコンソール

ツール -> 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

ここでは、PDFを生成する前に3秒間待機するためにTask.Delayメソッドを使用します。 待機が完了すると、PDFはアプリケーションの作業ディレクトリに"HelloWorld.pdf"として保存されます。

そして、これが最終製品です。

Csharp Wait For Seconds 2 related to IronPDFでC#の待機を使用する方法

IronPDFでの待機メソッドの使用

C#アプリケーションでは、データをDataTableに読み込む、またはIronPDFを使用してPDFレポートを生成するなどの操作を行う際に、スリープ機能を効率的に使用して現在のスレッドとCPUの時間を管理することができます。

結論

最初は直感に反するかもしれませんが、コードに待機ステートメントを実装することは、効率的なアプリケーションを構築するために欠かせないスキルです。 そして、IronPDFを組み込むことで、メインスレッドをブロックせずにPDFドキュメントを即時に作成することで、アプリケーションを次のレベルに引き上げることができます。

IronPDFを試してみる準備はできましたか? 30日間の無料トライアルで始めることができます。 開発目的での使用は完全に無料なので、それがどのようなものであるかを実際に見ることができます。 そして、気に入った場合は、IronPDFは$799から始まります。 より大きな節約のためには、Iron Suiteをチェックしてください。ここでは、9つのIron Softwareツールを2つの価格で手に入れることができます。 コーディングを楽しんでください!

Csharp Wait For Seconds 3 related to 結論

よくある質問

C#でPDFレンダリングを遅延させるにはどうすればいいですか?

C#でPDFレンダリングを遅延させるには、同期的な待機には`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レンダリングを一時停止することは可能ですか?

はい、`Thread.Sleep`を使用して同期的に、`Task.Delay`を使用して非同期的に、C#で特定の時間PDFレンダリングを一時停止できます。これによりPDF生成タスクの実行タイミングを制御することができます。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。