2010-12-15 9 views
1

C#4.0でアプリケーションを開発しています。私は現在のシステム時間に応じてメソッドを呼び出す必要があります。私はタイマーコントロールを使用してそれを行うことはできますか?もし誰かが私にこのことを教えることができれば素晴らしいだろう。C#でタイマーを使用してアクションをトリガーする

ありがとう、 Rakesh。

答えて

2

あなたは、はいにできるはずです以下のコード

System.Timers.Timer _timer1 = new System.Timers.Timer(); 
_timer1.Elapsed += new ElapsedEventHandler(_timer1_Elapsed); 
//1 second 
_timer1.Interval = 1000; 
_timer1.Start(); 

//this event will be fired each 1 second 
private void _timer1_Elapsed(object sender, ElapsedEventArgs e) 
{ 
} 
1

を使用することができます。 Ghyath Serhalは、一般的にタイマークラスの使い方を教えてくれました。欠けている唯一のビットは、特定の時間にそれを行う方法です。これは非常に簡単なはずです - タイマーを設定するときには、アクションを発生させたい時間と現在の時間をとり、その差を秒単位で見つけて、これを使用して間隔を設定します。 AutoResetプロパティをfalseに設定して、すぐにカウントダウンを再開しないようにすることもできます。

イベントが発生する時刻を変更する場合は、トリガーでこれにフックし、タイマーを新しい時刻に更新するだけです。

編集する追加:このプランに問題が発生する可能性のあるシステム時間を誰かが変更した場合。私はあなたのタイマーをリセットするために簡単にそれを利用できるかどうかは分かりません。私はおそらく関連性はないと推測している。 :)

3

あなたは少し違って見たいと思うかもしれません。何時でもポーリングを行い、実行する必要があるものを実行する以外は何もせずにアプリケーションを書くことは簡単にできますが、ほとんどの時間を費やしてアプリケーションを使い果たしてしまいます。

代わりに、スケジュールされたタスクの作成を検討して、いつでもアプリを実行できるようにすることもできます。タスクスケジューラはhttp://msdn.microsoft.com/en-us/library/aa383614(VS.85).aspxに文書化されており、http://taskscheduler.codeplex.com/にはマネージラッパーがあります。 (それはXP以上で動作すると言いますので、うまくいけばあなたのニーズをカバーします)。

幸運、

1

タイマーでの問題は、それが経過イベントが適切なタイミングで正確に呼ばれることを保証するものではないということです - あなたが知っているすべては、それがより大きい時間後に呼び出されるだろうということです間隔。 解決方法は、興味のある時間の解像度に依存します。たとえば、特定のイベントが発生した場合に各Minuetを確認する必要がある場合は、Minuetごとにイベントを発生させ、DateTime.Nowを使用してチェックしますシステム時刻がイベントが発生する時刻である場合

システムがどれだけビジーであるかに応じて、インターバルが設定されてから数秒後にタイマー経過イベントが発生することを常に推奨するのがよいポリシーです。

関連する問題