VB.net のタイマーを使用して、15 分ごとに実行する必要がある関数があります。
しかし、ここでの課題は、たとえば午前 2 時にタイマーを開始すると、実際の関数は午前 2 時 15 分に実行され、その後同じ関数が 15 分ごとに実行されることです。
タイマーが開始され、Addhandler オペレーターが 15 分ごとに「ONhandler」関数を呼び出すサブ「タイマー」があります。
private mytimer as timer
private sub Timer()
{
with mytimer
.autoreset=true
.enabled=true
.interval=900000
.start
end with
AddHandler mytimer.elapsed ,assressof onhandler
console.readkey()
}
onhandler(byval source as oblject,byval e as elapsedeventargs)
{
Performs the DB operations.
}
最初は、毎時00分、15分、30分、45分ごとに正確にタイマーを開始するロジックがいくつかありました。アプリケーションを午前 1 時 55 分に開始すると仮定すると、ロジックはアプリケーションが午前 2 時になるまでスリープし、午前 2 時にタイマーが開始するようにします。15 分後、つまり午前 2 時 15 分に関数が実行されます。
しかし、私が必要としているのは、アプリケーションを 2:00 から 2:15 まで 15 分間待機させたくないということです。代わりに、2:00 に処理してからタイマーを開始する必要があります。これを克服するために、同じプロセスを実行する AddHandler メソッドと同じ名前の新しい関数「onhandler」を含めました。
private sub Timer()
{
onhandler() ****New function namesd as AddHandler method
with mytimer
.autoreset=true
.enabled=true
.interval=900000
.start
end with
AddHandler mytimer.elapsed ,assressof onhandler
console.readkey()
}
onHandler()
{
Do same DB function
}
新しいロジックを実装した後、アプリケーションを午前 1 時 55 分に開始すると、アプリは午前 2 時までスリープ状態になり、その後、sub 内の Onhandler() メソッドが最初に実行され、午前 2 時 1 分に完了します。ここで、タイマーが 15 分間開始され、タイマーが 15 分間隔に設定されているため、次の一連のプロセスが午前 2 時 16 分に実行されます。しかし、午前 2 時 15 分にプロセスを実行する必要があります。つまり、タイマー間隔は 15 分ではなく 14 分でなければなりません。
別の例として、アプリケーションを午前 3 時に開始し、午前 3 時 3 分に終了する場合、次の実行までに 15 分ではなく 12 分の間隔が必要です。
プロセスの終了時間に基づいてプロセスが完了するたびにタイマー間隔を動的にする方法はありますか???
PS : 私は DotNet を初めて使用し、ここ数日間、この問題について頭を悩ませてきました。皆さん、ここで私を助けてください。
前もってありがとう、マドゥ。