2009-08-06 4 views
3

私はC#で書かれたプログラムを持っています。私はTimerクラスが特定の時間に関数を実行するようにします。タイマークラスとC#

例えば:私はTimerクラスを使用していることをどのように20:00に実行機能のX

を行うことができますか?

答えて

2

Tickイベントで、次いで(適切な値に目盛りを設定)を確認するためにタイマTickイベントを使用する:

DateTime Now = DateTime.Now; 

if(Now.Hours == DateTimeCallX.Hours 
&& Now.Minutes == DateTimeCallX.Minutes 
&& xHasRan == false) 
    { 
    x(); 
    xHasRan = true; 
    } 

をDateTimeCallX 20:00に設定するDateTimeオブジェクトです。
xHasRanは、関数が呼び出されたかどうかを示すブール値です。これは、最初にfalseに設定され、xが呼び出された後にtrueに設定されるため、タイマティックが同じ分に再び実行された場合、再び。

+0

このソリューションの小さな問題は、タイマーが分間隔で実行されない場合、x()を実行しないことです。たぶん、==の代わりに> =を使うことについてのことです – Neale

0

20:00 PMまでのミリ秒数を計算するか、Quartz.NETのようなスケジューラを使用する必要があります。

2

タイマーが起動すると、時刻と機能がその日に実行されたかどうかを確認します。時刻が20:00以降で、関数が呼び出されていない場合は、呼び出します。それ以外の場合は、終了して次のイベントを待ちます。

また、フォームタイマーとSystem.Threading.Timerの動作が若干異なります。

-1

タイマーを設定して、何時になっているかをチェックし、希望の時間が経過していればコードを実行するか、それともFIL MILLISECONDSでない場合はスリープ状態に戻ります。

+0

コードが既に実行されているかどうかを確認する必要があります。これは、目的の実行時間を変更するか、または最後の実行が実行されたときにタイムスタンプを保持することによって実行できます。また、数ミリ秒間スリープしてもう一度チェックすることは、パフォーマンスにとって非常に良いことではないと思います(時間をチェックするのにリソースがかかりませんが、それには時間がかかります)。状況によっては、スリープ時間を長くする必要があります(たとえば、5分後にプロセスを実行することが問題でない場合は、5分の間隔を選択します)。 – Gertjan

+0

@Gertjan、いいえ、そうではありません...時間が経過したことをタイマーが検出した場合、 "コードを実行"し、再び起動するようにリセットしません。 "コードを実行し"終了します。 。 –