時間指定でメソッドをコールする

2019年6月28日

概要

C#で時間を指定をしてメソッドをコールしたいなぁってことがあったので、メモ書きを置いておきます。もっとスマートな方法があればコメント頂ければ幸いです。

ソース

ソースの説明

System.Threading.Timerの宣言

System.Threading.Timerは別スレッドで動作します。
参照がない状態ではガベージコレクタの対象となるので、フィールドに定義しています。

メインスレッドでは動作しない

指定時間が来てコールされたメソッドはメインスレッドとは別のスレッドで動作します。
そのため、フォームのコントロール等にアクセスする場合はInvokeメソッドを使用します。
InvokeメソッドはDelegateを扱うので例のようにラムダ式で記述できます。

注意点

System.Threading.Timerはスレッドセーフではないので、複数スレッドから操作を行う場合には注意が必要です。
今回は他のTimerにはない起動までの時間を指定できる機能を特別に使っているだけなので、一定間隔での処理等でTimerを使用する場合は、System.Windows.Forms.TimerやSystem.Timers.Timerを使用してください。

C#

Posted by marimo