.NET ヘルプ

C# タイマー(開発者向けの仕組み)

公開済み 2024年3月6日
共有:

イントロダクション

C# のタイマークラスは、指定された間隔でコードの実行をスケジュールするための強力なツールです。 Windowsフォームアプリケーションまたはコンソールアプリを開発する際に、IronPDFやIronOCRなどのツールの使用方法を理解することは重要です。タイマーアプリケーションの機能を大幅に向上させることができます。 このチュートリアルでは、C#でタイマーを使用する基本について説明します。タイマーの設定方法、イベントの処理方法、およびアプリケーションでスムーズに動作させる方法を含みます。 またC#アプリケーションでPDFを自動生成するIronPDFC#のタイマーを使用してPDF生成を自動化する。

C#のタイマークラスの導入

C# タイマー (開発者向けの動作説明):図1 - Timer Class

C#にはさまざまなタイマークラスがあり、それぞれ異なる作業や環境に適しています。 最も一般的に使用されるタイマーのクラスは、サーバーベースのタイマー用のSystem.Timers.Timerと、Windows Formsアプリケーション用のSystem.Windows.Forms.Timerです。 タイマークラスを使用する際には、イベントハンドラの役割を理解することが重要です。これらのハンドラは、タイマーによって指定された各重要な瞬間、例えば、ティックや経過時間のイベント間隔で実行されるアクションを決定します。

新しいタイマーの設定

タイマーの時間間隔を設定することは、その操作の基本となります。これにより、タイマーのイベントハンドラがどのくらいの頻度で呼び出されるかが決まり、アプリケーションの時間に敏感な機能のリズムを制御します。 C# アプリケーションでタイマーを使用するには、特に Windows フォーム アプリケーションを開発するとき、ツールボックスから System.Windows.Forms.Timer コンポーネントをフォームに追加するか、より柔軟にタイマー オブジェクトをプログラム的に作成することから始めます。

var timer = new System.Timers.Timer(); // use a timer
timer.Interval = 2000; // Sets the timer interval to tick every 2 seconds
var timer = new System.Timers.Timer(); // use a timer
timer.Interval = 2000; // Sets the timer interval to tick every 2 seconds
Dim timer = New System.Timers.Timer() ' use a timer
timer.Interval = 2000 ' Sets the timer interval to tick every 2 seconds
VB   C#

このシンプルな設定により、2秒ごとに刻むタイマーが作成されます。 しかし、タイマーがアクションを実行するには、イベントハンドラーに接続する必要があります。

終了イベントの処理

System.Timers.TimerElapsed イベントに経過イベントハンドラーを追加することで、アプリケーションが各インターバルでタスクを実行し、時間に基づくトリガーに効果的に応答できるようにします。 このイベントは、タイマーの間隔が経過するたびに発生します。 このイベントにハンドラーをアタッチして、タイマーが刻むときに何を実行すべきかを指定します:

timer.Elapsed += OnTimedEvent;
timer.Elapsed += OnTimedEvent;
timer.Elapsed += OnTimedEvent
VB   C#

上記のコードでは、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);
}
Shared Sub OnTimedEvent(ByVal source As Object, ByVal e As System.Timers.ElapsedEventArgs)
	Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}", e.SignalTime)
End Sub
VB   C#

このメソッドは、タイマーが経過するたびに現在の時刻をコンソールに表示するだけで、タイマーイベントにどのように対応するかを示しています。

タイマーの開始と停止

タイマーとそのイベントハンドラーを設定した後、タイマーを開始する必要があります。 これは、Enabled プロパティを true に設定するか、Start メソッドを呼び出すことで行います。

timer.Enabled = true; // or timer.Start();
timer.Enabled = true; // or timer.Start();
timer.Enabled = True ' or timer.Start();
VB   C#

タイマーを停止するには、Enabledfalse に設定するか、Stop メソッドを呼び出すことができます。 これは、不要な操作を実行しないようにアプリケーションを防ぐために非常に重要です。

Windowsフォームアプリケーションでタイマーを使用する

System.Windows.Forms.Timer は、Windows Forms アプリケーションのイベント駆動モデルとシームレスに統合するように設計された貴重な Windows フォーム コンポーネントであり、ユーザー インターフェイスの応答性を損なうことなく定期的なアクションを容易にします。

例: フォームにタイマーを追加する

Windows Formsアプリケーションでは、ツールボックスからタイマーコントロールをフォームにドラッグするか、次のようにプログラムで作成できます:

System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
myTimer.Interval = 1000; // 1 second
myTimer.Tick += new EventHandler(TimerEventProcessor);
myTimer.Start();
System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
myTimer.Interval = 1000; // 1 second
myTimer.Tick += new EventHandler(TimerEventProcessor);
myTimer.Start();
Dim myTimer As New System.Windows.Forms.Timer()
myTimer.Interval = 1000 ' 1 second
AddHandler myTimer.Tick, AddressOf TimerEventProcessor
myTimer.Start()
VB   C#

ここで、TimerEventProcessor は、Tick イベントが発生するたびに呼び出されるイベントハンドラーであり、System.Timers.TimerElapsed イベントに似ています。

高度なタイマー管理

タイマーを使用したスレッドセーフティ

タイマーを使用する際には、アプリケーションのスレッドモデルを理解することが重要です。 System.Timers.TimerおよびSystem.Threading.Timerは、コールバックをスレッドプールスレッドで実行し、並列実行を可能にします。 しかし、コールバックメソッドが共有データを変更したり、ユーザーインターフェース要素と相互作用したりすると、スレッドセーフティの問題が発生する可能性があります。 タイマーのコールバックからUI要素を安全に更新するためには、アプリケーションの種類に特有の手法を使用して、コールバックをUIスレッドにマーシャリングする必要があります。(e.g., Windows FormsでInvokeまたはBeginInvokeを使用する).

高精度タイミング

高精度タイミングを必要とするアプリケーション向け(例えば、マルチメディアアプリケーションやゲーム)、経過時間を高精度で測定するためには、タイマーよりもSystem.Diagnostics.Stopwatchクラスの方が適している場合があります。 Stopwatchクラスはタイマー自体ではありませんが、タイマーと組み合わせて使用することで正確な時間測定を実現できます。

実用的な例

例: カウントダウンタイマーの実装

タイマーが役立つ一般的なシナリオは、カウントダウンタイマーを作成することです。 これはタイマーインターバルを1秒に設定することで行うことができます(1000ミリ秒)タイマーが経過するたびにカウンターを減少させます。 カウンターがゼロに達すると、タイマーが停止し、カウントダウンの終了を示します。

using System;
namespace CountdownApp
{
    class Program
    {
        static int countdownTime = 10; // Countdown from 10 seconds
// public static void main
        public static void Main(string [] args)
        {
            StartCountdown();
            Console.ReadLine(); // Prevent console from closing immediately
        }
        static void StartCountdown()
        {
            var timer = new System.Timers.Timer(1000); // Tick every second, var timer
            timer.Elapsed += UpdateCountdown;
            timer.Enabled = true;
        }
// public static void printtimes
        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
        public static void Main(string [] args)
        {
            StartCountdown();
            Console.ReadLine(); // Prevent console from closing immediately
        }
        static void StartCountdown()
        {
            var timer = new System.Timers.Timer(1000); // Tick every second, var timer
            timer.Elapsed += UpdateCountdown;
            timer.Enabled = true;
        }
// public static void printtimes
        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
            }
        }
    }
}
Imports System
Namespace CountdownApp
	Friend Class Program
		Private Shared countdownTime As Integer = 10 ' Countdown from 10 seconds
' public static void main
		Public Shared Sub Main(ByVal args() As String)
			StartCountdown()
			Console.ReadLine() ' Prevent console from closing immediately
		End Sub
		Private Shared Sub StartCountdown()
			Dim timer = New System.Timers.Timer(1000) ' Tick every second, var timer
			AddHandler timer.Elapsed, AddressOf UpdateCountdown
			timer.Enabled = True
		End Sub
' public static void printtimes
		Private Shared Sub UpdateCountdown(ByVal source As Object, ByVal e As System.Timers.ElapsedEventArgs)
			If countdownTime > 0 Then
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Console.WriteLine(countdownTime-- + " seconds remaining");
				Console.WriteLine(countdownTime & " seconds remaining")
				countdownTime -= 1
			Else
				Console.WriteLine("Countdown finished!")
				DirectCast(source, System.Timers.Timer).Stop() ' Stop the timer
			End If
		End Sub
	End Class
End Namespace
VB   C#

以下は、上記のコードの出力結果です:

C# タイマー(開発者向けの動作方法):図2 - カウントダウンタイマーの出力

例: 定期的なデータベースチェックのスケジュール設定

タイマーは、データベースの定期的なチェックに使用することができます。例えば、新しいデータのクエリや古いレコードのクリーンアップを行うことが考えられます。 以下の例は、データベースを1時間ごとにクエリするタイマーを設定します:

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);
}
Private Shared Sub SetupDatabaseCheckTimer()
	Dim timer = New System.Timers.Timer(3600000) ' Set to 1 hour
	AddHandler timer.Elapsed, AddressOf CheckDatabase
	timer.Enabled = True
End Sub
Private Shared Sub CheckDatabase(ByVal source As Object, ByVal e As System.Timers.ElapsedEventArgs)
	' Perform database operations here
	Console.WriteLine("Database checked at " & e.SignalTime)
End Sub
VB   C#

IronPDFの紹介

IronPDF - HTMLとASPXからPDFを簡単に生成は、特にHTMLやURLから簡単にPDFを生成する点が高く評価されており、基本的にアプリケーションが任意の内容を「印刷」できるようになります。PDFドキュメントとしてのHTMLコンテンツ. レポート、請求書、標準化された形式で提示する必要があるウェブコンテンツの生成に非常に役立ちます。 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");
    }
}
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
VB   C#

IronPDFのインストール

NuGet パッケージマネージャーを使用して IronPDF をインストールするには、次のコマンドを実行します:

Install-Package IronPdf

毎日更新されるデータを含むPDF形式の日報を生成する必要があると想像してください。 簡単のために、基本的なHTMLレポートを生成し、IronPDFを使用して毎日24時間ごとに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}");
    }
}
Imports System
Imports System.Timers
Imports IronPdf
Imports Timer = System.Timers.Timer
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Set up the timer for 24 hours
		Dim timer As New Timer(24 * 60 * 60 * 1000)
		AddHandler timer.Elapsed, AddressOf OnTimedEvent
		timer.AutoReset = True
		timer.Enabled = True
		Console.WriteLine("Press Enter to exit the program.")
		Console.ReadLine()
	End Sub
	Private Shared Sub OnTimedEvent(ByVal source As Object, ByVal e As ElapsedEventArgs)
		GeneratePdfReport()
	End Sub
	Private Shared Sub GeneratePdfReport()
		Dim renderer = New HtmlToPdf()
		Dim pdf = renderer.RenderHtmlAsPdf("<h1>Daily Report</h1><p>This is the automated daily report.</p>")
		Dim outputPath As String = $"f:\DailyReport_{DateTime.Now:yyyyMMdd}.pdf"
		pdf.SaveAs(outputPath)
		Console.WriteLine($"Generated PDF report at {outputPath}")
	End Sub
End Class
VB   C#

出力

コードを実行すると、コンソールに以下の出力が表示されます。 ここで、速い出力のためにコードを修正しましたので、10秒のタイマーを使用します。

C# タイマー(開発者向けの動作方法): 図3 - コンソール出力

こちらが生成されたPDFです:

C# タイマー(開発者向けの動作説明):図4 - PDFレポート

結論

C# タイマー (開発者向けの仕組み): 図5 - ライセンス

結論として、C# タイマーを IronPDF に統合することは、.NET アプリケーションで PDF ドキュメントの生成と管理を自動化するための強力なアプローチです。 提供された例を通じて、PDF生成タスクを定期的にトリガーするためにC#のタイマーを設定する方法を検討しました。これには、頻繁なテスト目的やスケジュールされたレポート生成が含まれます。

C# タイマーを使用することで、PDF に関連するタスクが実行されるタイミングを正確に制御でき、定期的な更新、レポート生成、またはスケジュールに従って行う必要があるタスクを実行することができます。 IronPDFは、動的コンテンツ、HTML、さらにはウェブページに基づいてPDFドキュメントを作成、操作、および保存するためのシンプルで効率的な方法を提供することで、この機能を強化します。

IronPDFはライセンス情報付き無料トライアルライセンスは、フルアクセスおよびサポートのために利用可能です。 これは、あなたの.NETアプリケーションに包括的なPDF機能を実装するための費用対効果の高い方法を提供します。

< 以前
GraphQL C#(開発者向けの動作方法)
次へ >
Math.Round C#(開発者向けの利用方法)