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

以上、かなりのレアケースと思われる事例について説明してみました。何かの参考にしてください。