0

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 を初めて使用し、ここ数日間、この問題について頭を悩ませてきました。皆さん、ここで私を助けてください。

前もってありがとう、マドゥ。

4

2 に答える 2

1

これを行う正しい方法は、特定の時間にWindows タスクを実行することです。しかし、本当にこれをアプリケーションに記述したい場合は、毎分プログラムを起動して時間をチェックし、これを呼び出されたメソッドに追加するだけです。

    Dim d = DateTime.Now
    if(Not (d.Minute = 0 OrElse d.Minute = 15 OrElse d.Minute = 30 OrElse d.Minute = 45)) Then
        Return 'Quits if the current time is not right
    End If
于 2013-05-16T20:38:36.150 に答える
0

かつて似たようなことがありました。次にプロセスを実行する必要がある時間を含む NextExecutionTime という変数があります。

最初は(例)午前2時です。

次に、1 分ごとにタイマーを設定し、現在の時刻が NextExecutionTime と同じかそれ以上の場合は、プロセスを実行し、NextExecutionTime 変数を次回プロセスを実行する時刻に設定します。

于 2013-05-17T14:48:44.783 に答える