回答:
Windows.Forms.Timer
Windowsフォームメッセージループを使用して、タイマーイベントを処理します。これは、Windowsフォームアプリケーションで使用されているタイミングイベントを書き込むときに使用し、メインUIスレッドでタイマーを起動する必要があります。
DispatcherTimer
WPFタイミングメカニズムです。同様の方法でタイミングを処理する必要があり(これは単一のスレッドに限定されない-各スレッドには独自のディスパッチャーがある)、WPFを使用している場合に使用する必要があります。Dispatcherと同じスレッドでイベントを発生させます。
一般的に、WPF == DispatcherTimer
そしてWindows Forms == Forms.Timer
。
そうは言ってもSystem.Threading.Timer
、class
別のスレッドで起動するタイマーもあります。これは、UIなどを更新しようとしない純粋な数値タイミングに適しています。
タイマーに関する良い記事がここにあります:http : //www.progware.org/Blog/post/Timers-in-WPF.aspx
結論として:
DoSomething()がGUIコンポーネントを操作する場合は、タイマーを使用する必要があります:this.Dispatcher.Invoke((Action)delegate {// GUI RELATED CODE HERE}別のスレッドから直接GUIコントロールにアクセスできないため。DispatcherTimerを使用すると、それをする必要はありません。
DoSomething()が時間のかかるタスクとして実行される場合、DispatcherTimerの場合はGUIがフリーズします。タイマーの場合、長いメソッドが別のスレッドで実行されるため、そうなりません