参考ます。https://blog.csdn.net/gangzhucoll/article/details/93744022
タイトル:C#3タイマー
勧告:DOは、この記事を読んでいない、この記事では、元のルックアンドフィール、コンテンツおよびより包括的なよりも優れている、これは、以下の情報を収集することと等価です。
一般的にC#で使用される3があります タイマー :
- System.Windows.Forms.Timer
- でSystem.Timers.Timer
- System.Threading.Timer
零、System.Windows.Forms.Timer
タイマーは、それが実行されている限り、他のスレッドが待機しなければならないことをその手段、シングルスレッドです。
タイマーは、次の特性があります。
- 完全UIスレッドに基づいて、タイマーは、コールバックメソッドティックに送ら、スレッドメッセージキューに、オペレーティング・システムのタイマメッセージ、メッセージポンプ抽出メッセージを実行するために呼び出すスレッド、およびトリガされます。
- スタートとストップタイマーを起動および停止使用してください。
- 長すぎるためのUI操作は、ティックが失わつながります。
- あなたはTickイベントをフックデリゲートを使用することができます。
- 精度は高くありません。
- 確かに、自動運転タイマーの有効セットで
タイマーのWinForm UIの原因となります上記の第一の特徴から分かることはそれほど大規模な演算処理やタスクのタイミングIO操作の数を必要に応じて、アニメーションを停止し、タイマーは推奨されません。
----------------
免責事項:この記事は元の記事CSDNのブロガープログラマ猫」であり、BY-SAの著作権契約CC 4.0に従って、再現し、元のソースと、このリンクを添付してください声明。
オリジナルリンクします。https://blog.csdn.net/gangzhucoll/article/details/93744022
テストのデモ:
プライベート 無効 Button_Click(オブジェクト送信者、EventArgsの電子) { timer.Interval = 1000年。 timer.Tick + = Timer_Tick。 timer.Start(); } プライベート ボイド Timer_Tick(オブジェクト送信者、のEventArgs電子) { ため(INT iは= 0 ; I < 10000 ; I ++ ) { File.AppendAllText(Directory.GetCurrentDirectory() + " のtest.txt " 、i.ToString())。 この .label_output.Text =" 現在の操作:挿入番号" + I; } }
我々は(など、ボタンがクリックできない、ウィンドウを移動することはできません)計算]ボタンをクリックして、私たちはWinフォームは仮死登場見つかります
Aは、でSystem.Timers.Timer
タイマーは、タイマーベースのサーバーで設計されたマルチスレッド環境でのセカンダリスレッドのためである、あなたがスレッド間で提起経過イベントを処理するために移動することができ、それはタイマーのより正確です。
タイマーは、次の特性があります。
- ThreadPoolの上の経過と経過実行を設定することにより、イベント処理のオフ戻ります。
- 間隔は間隔で設定されました。
- 自動リセットがFalseに設定すると、経過イベントはのみ第1の時間間隔に到達した後にトリガされます。
- これは、マルチスレッド・タイマーです。
- Winフォーム上で直接コントロールを呼び出すことはできません、手数料を使用する必要があります。
- 主にWindowsサービスで使用されます。
同様に、我々は、コードにタイマータイマーを使用する方法を見て
ビュー:----------------
免責事項:この記事は「元の記事CSDNのブロガープログラマ猫で、かつBY CC 4.0に従ってください-SAの著作権契約は、再現し、元のソースのリンクと、この文を添付してください。
オリジナルリンクします。https://blog.csdn.net/gangzhucoll/article/details/93744022
テストのデモ:
でSystem.Timers.Timer timersTimer = 新でSystem.Timers.Timer(); プライベート 無効 Button_Click(オブジェクト送信者、EventArgsの電子) { timersTimer.Interval = 1000年。 timersTimer.Enabled = 真; timersTimer.Elapsed + = TimersTimer_Elapsed。 timersTimer.Start(); } プライベート ボイド TimersTimer_Elapsed(オブジェクト送信者、System.Timers.ElapsedEventArgs E) { ため(INT iは= 0 ; I < 10000 ;私++ ) { この .BeginInvoke(新しいアクション(()=> { この .label_output.Text = " 当前时间:" + DateTime.Now.ToString(" YYYY-MM-DD HH:MM:SS " ); })、NULL ) ; } } プライベート ボイドのButton1 Click(オブジェクト送信者、のEventArgs電子) { timersTimer.Stop()。 }
上記のコードを実行して、あなたは消えて仮死のWinFormインターフェースの場合があります。
二、System.Threading.Timer
タイマーにも次のような特徴を持っているマルチスレッドタイマー、次のとおりです。
- マルチスレッド
- 最初の二つのタイマー持っていないあなたはTimerオブジェクトを破壊するために、あなたはDisposeメソッドを呼び出す必要があり、タイマーを停止する場合に比べて開始と停止方法。
- 時間間隔が停止することはできません、同時に複数のスレッドを実行する複数のスレッドによって引き起こされた実行時間未満であるため、すぐにすべてのタイマーを停止しないDisposeメソッドを呼び出した後、これがあります。
- それは軽量タイマーです。
- 提供コンストラクタのすべてのすべてのパラメータ。
- あなたは、開始時刻を設定することができます。
- 私はWinフォームのプログラムを使用することを提案していません。
- 私たちは、(コンソールアプリケーションで次のコードを入力してください)コードを見て:
----------------
免責事項:この記事は元の記事CSDNのブロガープログラマ猫」であり、BY-SAの著作権契約CC 4.0に従って、再現し、元のソースと、このリンクを添付してください声明。
オリジナルリンクします。https://blog.csdn.net/gangzhucoll/article/details/93744022
静的System.Threading.Timer threadingTimer。 静的 int型 numSum = 0 ; 静的 ボイドメイン(文字列[]引数) { threadingTimer = 新しい System.Threading.Timer(新しい System.Threading.TimerCallback(threadingTimer_Elapsed)、NULL、0、1000年)。 Console.Read(); } プライベート 静的 ボイド threadingTimer_Elapsed(オブジェクトの状態) { ため(INT iは= 0 ; I < 10000; I ++ ) { numSum ++ ; Console.WriteLineを(" 出力デジタル:" + I); } IF(numSum> 10000 ) { threadingTimer.Dispose(); Console.WriteLineを(" 終了" ); } }
注:我々タイマータイマースレッド不要になったの倍数、我々は占有リソースを解放するためにDisposeメソッドを呼び出すことができます。
しかし、タイマータイマーは、補正が過負荷にDisposeメソッドが呼び出された後に発生する可能性がありますので、我々は完全な使用のDispose(WaitHandle)メソッドを待つためにすべてのバックを使用することができますので、実行するコールバックを配置するスレッドプールのスレッドに基づいているため。
第三に、要約
我々はC#は異なるタイマータイマー特性と環境の使用に属すると結論をまとめると
System.Windows.Forms.Timer
、シングルスレッドのUIをベースと、精度が高くない、それが立ち往生フォームを引き起こす可能性があります
Winフォームの開発、およびタイマー処理動作の多数を必要とせず、計算業務IO
でSystem.Timers.Timer
ThreadPoolの中で実行されている、マルチスレッド
主にWinSerice開発のために、フォーム上のコントロールはWinフォームで使用された場合の手数料によって呼び出される必要があります
System.Threading.Timer
マルチスレッド、実行するスレッドプール、軽量、停止する処分の必要性、パラメータは、コンストラクタで設定する必要があります
Winフォームでの使用を推奨しません
----------------
免責事項:この記事は元の記事CSDNのブロガープログラマ猫」であり、BY-SAの著作権契約CC 4.0に従って、再現し、元のソースと、このリンクを添付してください声明。
オリジナルリンクします。https://blog.csdn.net/gangzhucoll/article/details/93744022