System.Timers.TimerのElapsedイベントは、System.Windows.Forms.TimerのTickイベントと実質的に同じですか?経過イベントv Tickイベント?
特定の状況では、他のものよりむしろ1つを使用する利点がありますか?
System.Timers.TimerのElapsedイベントは、System.Windows.Forms.TimerのTickイベントと実質的に同じですか?経過イベントv Tickイベント?
特定の状況では、他のものよりむしろ1つを使用する利点がありますか?
.Netフレームワークのタイマーについて詳しくは、hereとhereを参照してください。
タイマーには3種類あります。
それはスレッドセーフだと私は個人的System.Timers.Timer
を好みます。
私は初心者だから、どうして他のスレッドが危険なのか尋ねる必要があるのだろうか? – whytheq
@whytheqスレッドセーフとは、System.Timers.Timerクラスのインスタンスが複数のスレッドから安全にアクセスできることを意味します。この場合、他のタイマークラスも問題に直面します。マルチスレッドアプリケーションでは、スレッドの安全性が一般的な問題です。完全な理解のために、この一連の記事を読んでください。 http://www.albahari.com/threading/ – ABH
なので、タイマーは他のスレッドが動いているかどうかにかかわらずタイマーを稼働し続けますか? – whytheq
その他の回答がありますが、上記の2つのタイマーの間の相違点は、System.Windows.Forms.Timer
がUIスレッドでコールバックを呼び出すのに対して、System.Timers.Timer
はコアスレッドプールのスレッド。
それはそれを言う素晴らしい方法です。 –
... 'System.Timers.Timer'はスレッドセーフですが、フォームタイマーはそうではありませんか?そして、各プロセスを開始するためにタイマーを使用して並列プロセスを実行したい場合は、 'System.Timers.Timer'が使用するのに最適なタイマーですか? – whytheq
それはあなたのスレッディング要件によって異なります。タイマーが実行しているコードでGUIを変更する必要がある場合は、Formsタイマーを使用します。また、(通常は)イベントスレッドが1つしかないことを前提とすると、Formsタイマーイベントハンドラが(同時に複数回)同時に呼び出されることはありません。しかし、一般的に、GUIスレッドで非GUI関連のタスクを実行するべきではありません(GUIのレスポンスが低下するため)。タイマーのタイマーは、現在は並行処理の責任を負います。 – SimonC
Timers.Timerは私の 'Windows 7 laptop'で働いていましたが、' System.Threading.Timer'は 'Windows Server 2008 R2'で私のために働いた唯一のものです。 – Lijo