Windows サービス タイマー コントロール選択ガイド
タスクを定期的に実行する Windows サービスを構築する場合、適切なタイマー コントロールを選択することが重要です。 System.Timers.Timer
と System.Threading.Timer
の両方をこの目的に使用できますが、それぞれの効果に注意してください。
System.Timers.Timer: 信頼できる永続化オプション
System.Timers.Timer
Windows サービスの信頼性と耐久性を提供します。オペレーティング システムのタイミング メカニズムを活用して、サービスの実行可能ファイルがメモリからアンロードされてもタイマーがアクティブなままであることを保証します。ただし、特定の Windows サービス シナリオでは、このタイマーで問題が発生する可能性があることが示唆されています。
System.Threading.Timer: 柔軟な代替手段
System.Threading.Timer
Windows サービスのより柔軟なオプションを提供します。これは軽量のタイマーとみなされ、完全にマネージド コードで実装されています。 System.Timers.Timer
と同様に、自動リセットをサポートしており、コールバック関数を定期的に実行するために使用できます。 System.Timers.Timer
とは異なり、サービス実行可能ファイルのアンインストールの影響を受けません。
タイマーの選択
最終的に、System.Timers.Timer
と System.Threading.Timer
のどちらを選択するかは、特定のニーズと好みによって決まります。次の要素を考慮してください:
System.Timers.Timer
よりシンプルな構文とイベント駆動型モデルにより、使いやすくなりました。 System.Timers.Timer
オペレーティング システムのタイミング メカニズムを利用して、特定の状況でより高い信頼性を提供します。 System.Threading.Timer
間隔を動的に調整する機能など、タイマーの動作をより詳細に制御できます。 使用例
Windows サービスでこれら 2 つのタイマーを使用する方法の例を次に示します。
System.Timers.Timer
using System; using System.Timers; using System.ServiceProcess; namespace ServiceUsingSystemTimers { public class MyService : ServiceBase { private Timer timer; public MyService() { timer = new Timer(1000); // 设置 1 秒的间隔 timer.Elapsed += OnTimerElapsed; } protected override void OnStart(string[] args) { base.OnStart(args); timer.Start(); } protected override void OnStop() { base.OnStop(); timer.Stop(); } private void OnTimerElapsed(object sender, ElapsedEventArgs e) { // 执行您的周期性任务 } } }
System.Threading.Timer
using System; using System.Threading; using System.ServiceProcess; namespace ServiceUsingSystemThreadingTimer { public class MyService : ServiceBase { private Timer timer; public MyService() { timer = new Timer(OnTimerCallback, null, 1000, 1000); // 设置 1 秒的间隔 } protected override void OnStart(string[] args) { base.OnStart(args); //启动定时器 } protected override void OnStop() { base.OnStop(); timer.Dispose(); // 释放定时器资源 } private void OnTimerCallback(object state) { // 执行您的周期性任务 } } }
結論
System.Timers.Timer
と System.Threading.Timer
は両方とも、タスクを定期的に実行する Windows サービスを作成するために効果的に使用できます。どちらが優先されるかは、開発者の特定のニーズと好みによって異なります。 System.Threading.Timer
の Change
メソッドは、OnStart
での実際のニーズに応じて設定する必要があることに注意してください。コードのこの部分は、この例では省略されています。
以上がSystem.Timers.Timer と System.Threading.Timer: Windows サービスにはどちらのタイマー コントロールが最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。