C# の Timer 種類別 特徴 と 使い方
C#、.NET Framework で提供されている Timer は、 System.Windows.Forms.Timer 、 System.Threading.Timer 、 System.Timers.Timer の3種類があります。 それぞれの特徴を調べたので、以下の表にまとめてみました。 また、その下ではそれぞれのタイマーの詳しい特徴と利用方法をまとめました。 で、いきなり結論ですが、汎用的には System.Timers.Timer を利用するのがよさそうです。 精度が高く、UI のあるなしに関わらず利用できる (=ASP.NET でも利用可能) といった点が メリット として大きいと思います。
精度 同期/非同期 Windowsフォームでの利用 System.Windows.Forms.Timer 低 同期 ○ System.Threading.Timer ? 非同期 × System.Timers.Timer 高 非同期 ○ System.Windows.Forms.Timer- Windows Form 向けに最適化
- 精度が低い(上限 55msec。Windows メッセージループ の影響を受ける)
- 複数回分のイベントがまとめて1つとして発生する場合がある
- メイン関数と同一スレッドで動作(=シーケンシャル動作)
サンプルコード
using System; using System.Windows.Forms; public class Program1 : Form < public Program1() < this.InitializeComponent(); >public void InitializeComponent() < // タイマー生成 var timer = new Timer(); timer.Tick += new EventHandler(this.OnTick_FormsTimer); timer.Interval = 1000; // タイマーを開始 timer.Start(); // タイマーを停止 timer.Stop(); >public void OnTick_FormsTimer(object sender, EventArgs e) < >> System.Threading.Timer特徴
- Windows Form での使用は非推奨
- 軽量
- 別スレッドで動作
- インスタンス生成時のみデリゲートを設定できる
- 実行中はどこかにインスタンス保持しておかないとガベッジ対象になる
サンプルコード
using System.Threading; class Program2 < static void Main(string[] args) < // タイマーの生成 var timer = new Timer(new TimerCallback(ThreadingTimerCallback)); // タイマーをすぐに1秒間隔で開始 timer.Change(0, 1000); // タイマーを停止 timer.Change(Timeout.Infinite, Timeout.Infinite); >static void ThreadingTimerCallback(object args) < >> System.Timers.Timer特徴
- 精度が高い
- 別スレッドで動作
- 実行中はどこかにインスタンス保持しておかないとガベッジ対象になる
サンプルコード
using System.Timers; class Program3 < static void Main(string[] args) < // タイマーの生成 var timer = new Timer(); timer.Elapsed += new ElapsedEventHandler(OnElapsed_TimersTimer); timer.Interval = 1000; // タイマーを開始 timer.Start(); // タイマーを停止 timer.Stop(); >static void OnElapsed_TimersTimer(object sender, ElapsedEventArgs e) < >>参考記事
- Cactus Software - タイマーイベント (.NET C#バージョン)
- MSDN - System.Windows.Forms.Timer クラス
- MSDN - System.Threading.Timer クラス
- MSDN - System.Timers.Timer クラス
- @IT - .NET TIPS タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編)
- @IT - .NET TIPS タイマにより一定時間間隔で処理を行うには?(スレッド・タイマ編)
- @IT - .NET TIPS タイマにより一定時間間隔で処理を行うには?(サーバベース・タイマ編)
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!
2 件のコメント ありがとうござます。お役に立てて何よりです! 削除Social Links
このブログの新着記事情報は以下の Facebookページ か Twitter をフォローすると受け取れます。
Special Pages
Related Posts
Popular Posts
C# で SQL Server に対して INSERT文 ・ UPDATE文 ・ DELETE文 を 実行する 方法C# で SQL Server に対して変更処理(INSERT, UPDATE, DELETE)を実行する方法をまとめてみました。 目次 1行だけ実行 トランザクション処理 [おまけ] DB変更を行う.
IE の UserAgent まとめ (2)(2015/05/30 Microsoft Edge (Project Spartan) の User Agent は こちら 。) 以前の記事( IE の UserAgent まとめ )から時間が経ち、いろいろと変化してきたので、 IE8、IE9、IE10、.
C# で SQL Server から SELECT文 の 実行結果 を 取得する 方法C# で SQL Server に対して SELECT文 を実行する際のサンプルコードを作成しました。 ここでは「SELECT文 の 実行結果 を DataTable へ投入する方法」と「SELECT文 の 実行結果 を 1行ずつ読み込んで処理していく方法」の2種類を例として.
Visual Studio Code に 環境変数 設定 を追加 する 方法Node.js で環境変数を 設定 / 取得 する方法については 別記事 があるのでそちらをご参照ください。 ここでは、VSCode に対して 環境変数を 設定 / 取得 する方法についてのみまとめました。 目次 環境変数設定.
VBScript で Excel を操作する方法今回は「VBScriptでExcelを操作する方法」についてまとめます。 Excel や Access でも スクリプト が書けますが、Officeアプリ上のVBは「VBA」と呼ぶようです。 今回のまとめは 「VBScript」 なので、アプリケーションの起動など出だし部分.