Form のタイマーイベントを使わずに一定時間間隔の処理を行う
VB.Net や C# のフォームアプリケーションで一定時間ごとの処理を行う場合は、フォームのタイマーイベントを使うのが一般的だと思います。この方法だと、時間間隔を指定するだけでシステムが自動的にコードを実行してくれますし、イベントの開始と終了はタイマーの Enabled プロパティで容易に切り替えることができます。
しかしながら、もし「フォームを使ってはいけない」という制約があったらどうでしょうか。つまり、Visual Studio のクラスライブラリを作成する場合で、かつフォームが使えないというケースです。
「そんな制約があるのか?」と思われるでしょうけど、たまたまそういう事例に遭遇し、タイマーイベントと同等の機能を探すことになりました。
需要があるかどうかわかりませんが、ここでは「フォームのタイマーイベントを使わずに一定時間間隔の処理を行う」というレアケースの対応について説明します。
このようなケースでは、System.Timers.Timer クラスに一定時間間隔ごとにイベントを発生させ、イベントのイベントハンドラーを設定します。
以下のコードの Timer_Start を呼び出すことで OnTimed_Event に記述された処理が開始され、Timer_Close を呼び出すまで処理が継続します。当然ですが、変数 aTimer は呼出し元で値を保存しておく必要があります。
また、タイマー開始イベントに渡す引数 Time_Interval の単位はミリ秒になります。
Imports System.Timers
Public Class Class1
Shared Sub Timer_Start(ByRef aTimer As Timer, ByVal Time_Interval As Double)
'タイマー開始
aTimer = New Timer(Time_Interval)
AddHandler aTimer.Elapsed, AddressOf OnTimed_Event
aTimer.AutoReset = True
aTimer.Enabled = True
End Sub
Shared Sub Timer_Close(ByVal aTimer As Timer)
'タイマー停止
aTimer.Stop()
aTimer.Dispose()
End Sub
Shared Sub OnTimed_Event(source As Object, e As ElapsedEventArgs)
'ここに一定間隔で実行するコードを記述
End Sub
End Class
以上、かなりのレアケースと思われる事例について説明してみました。何かの参考にしてください。