|
System.Windows.Forms.Timerはすべてメインスレッドで動作します。 処理が溢れたら次の処理の始まりが遅れます。 ついでにUI操作が一切処理できないので、ユーザビリティ的にはとても残念なことになるでしょう。 なお、Tickイベントのハンドラ内で、メッセージキューが回ってしまうような処理、つまりApplication.DoEventsやMessageBox.Showをやってしまうと、それまでに来ていた後からきたタイマイベントの処理を始めることになったりします。
System.Timers.TimerおよびSystem.Threading.Timerは別スレッドで動作します。 これらの場合、新たにスレッドが作成されます(正確にはスレッドプールからあいているスレッドをもらってきます)。ですので並行動作が行われます。理屈上の上限はThreadPool.GetMaxThreadsになるかな? ただしSystem.Timers.Timerは、デザイナでフォームなどにポトペタした場合は既定でElapsedイベントがメインスレッドで動作するようになるので、System.Windows.Forms.Timerと同じ問題を引き起こします。
|