C#_Timer の使い方 ( スレッドについて )

Windows.Forms.Timer は、別スレッドから呼ぶと動かない。
では、何故動かないか。

ans
実行に必要なメッセージループ ( シングルスレッド処理 ) は
メインスレッド上で動いているから。

 

もう少し詳しく。

Timer を利用するには、イベントハンドラ呼び出し ( メッセージループ ) が必要。

メッセージループApplication.Runメインスレッド上で起動している。

メッセージループシングルスレッド処理

故に、メッセージループはメインスレッド上で動いているので
Timer を別スレッドから呼んでも 動かない。

 

Application.Run
メインスレッド上でメッセージループを起動する。
一般的なWindowsフォームアプリケーションは、
Application.Run メソッドの呼び出しを含んでいる。

 

メッセージループ
メッセージキューからメッセージ構造体を取り出し、
イベントハンドラ ( hoga_Click など )呼び出しを行う。
メッセージは無限ループ終了しない

 

イベントハンドラ:イベントが発生した時に呼び出される処理のこと。
イベント:処理を行うきっかけになる外部からの刺激。

 

こちらから 
http://home.a00.itscom.net/hatada/csharp/timer01.html
https://blogs.msdn.microsoft.com/nakama/2009/03/30/part-1-windows/
http://wa3.i-3-i.info/word11493.html

 

以上。後ほどマルチスレッドなどについて。