2012-04-13 18 views
9

System.Timers.TimerのElapsedイベントは、System.Windows.Forms.TimerのTickイベントと実質的に同じですか?経過イベントv Tickイベント?

特定の状況では、他のものよりむしろ1つを使用する利点がありますか?

+0

Timers.Timerは私の 'Windows 7 laptop'で働いていましたが、' System.Threading.Timer'は 'Windows Server 2008 R2'で私のために働いた唯一のものです。 – Lijo

答えて

6

.Netフレームワークのタイマーについて詳しくは、herehereを参照してください。

タイマーには3種類あります。

  • System.Windows.Forms.Timer
  • でSystem.Timers.Timer
  • System.Threading.Timer

それはスレッドセーフだと私は個人的System.Timers.Timerを好みます。

+0

私は初心者だから、どうして他のスレッドが危険なのか尋ねる必要があるのだろうか? – whytheq

+1

@whytheqスレッドセーフとは、System.Timers.Timerクラスのインスタンスが複数のスレッドから安全にアクセスできることを意味します。この場合、他のタイマークラスも問題に直面します。マルチスレッドアプリケーションでは、スレッドの安全性が一般的な問題です。完全な理解のために、この一連の記事を読んでください。 http://www.albahari.com/threading/ – ABH

+0

なので、タイマーは他のスレッドが動いているかどうかにかかわらずタイマーを稼働し続けますか? – whytheq

11

その他の回答がありますが、上記の2つのタイマーの間の相違点は、System.Windows.Forms.TimerがUIスレッドでコールバックを呼び出すのに対して、System.Timers.Timerはコアスレッドプールのスレッド。

+0

それはそれを言う素晴らしい方法です。 –

+0

... 'System.Timers.Timer'はスレッドセーフですが、フォームタイマーはそうではありませんか?そして、各プロセスを開始するためにタイマーを使用して並列プロセスを実行したい場合は、 'System.Timers.Timer'が使用するのに最適なタイマーですか? – whytheq

+0

それはあなたのスレッディング要件によって異なります。タイマーが実行しているコードでGUIを変更する必要がある場合は、Formsタイマーを使用します。また、(通常は)イベントスレッドが1つしかないことを前提とすると、Formsタイマーイベントハンドラが(同時に複数回)同時に呼び出されることはありません。しかし、一般的に、GUIスレッドで非GUI関連のタスクを実行するべきではありません(GUIのレスポンスが低下するため)。タイマーのタイマーは、現在は並行処理の責任を負います。 – SimonC

関連する問題