2012-11-29 12 views
6

これはやや単純な問題ですが、答えを見つけようとするたびに、Windowsのスケジュールされたタスクに関する情報が表示され続けます。これはこれではありません。特定の時間にメソッドを実行するスケジューリング。

は私のプログラムは、基本的にはこれです言​​う:私は、これらのメソッドは、別の日付時刻に実行させるためにそれらのコメントの代わりに

void StartDoingThings() 
{ 
    //At Specific System.DateTime 
    DoSomething() 

    //At another specific System.Datetime 
    DoSomethingElse() 
} 

何を入れ​​てください。

Thread.Sleep()またはSystem.Threading.Timersを使用して、(DateTimeOfEvent - DateTime.Now)に基づいて間隔を計算することもできますが、単にプログラムが実行されていると仮定すると、 2012年11月30日の9:30:00 AM、DoAnotherThing()メソッドを実行しますか?

+3

quartznetという名前のフレームワークがあります。 http://quartznet.sourceforge.net/ –

+4

あなたがスケジュールされたタスクを見続ける理由は、それがまさにそのために設計されたものだからです。スケジュールに従ってタスクを実行します。それぞれのタスクはそれ自身の操作スケジューリングを実行することができ、スケジューラはいつ実行するかを管理できます。 –

+0

これは間違いかもしれませんが、Windowsのタスクスケジューリングは「X時にはこのプログラムを実行する」ことを理解しており、おそらくそのプログラムでsoemthingを実行します。私は別のプログラムを実行していない、私はちょうど私の現在のプログラム内の何かが一定の時間まで待つことを望む。私が間違っている場合は間違いなく理解してもらえますが、Windowsタスクスケジューラは特定の時点ですでに実行中のプログラムの特定の部分を実行するのに役立たないでしょう。 – Xantham

答えて

4

所定の時間に何かを行う方法を「スケジュール」したい場合、それを行う方法はいくつかあります。私はThread.Sleep()を使用しません。なぜなら、何もしていないスレッドを束縛してリソースが浪費されるからです。

一般的なプラクティスは、定期的にスケジュールされたスケジュール(1分に1分間)を実行し、実行するタスクの共有リストを確認するポーリング方法を使用することです。 System.Timerは、ポーリング方式のために使用することができます。

aTimer = new System.Timers.Timer(10000); 
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 

OnTimedEvent方法を実行するための「タスク」のコレクションが保持されたコードを含めることができます。タスクの時間が到来すると、次のタイマの実行によって実行されます。

+0

それでは、dateTimeオブジェクトを与えただけのことは何も組み込まれていませんか?特定のDateTimeで何かをするのが一般的なように思えます。私のプログラムの中には、いくつかのタスクが数秒で遅くなり、数時間になることがあります。おそらく必要以上に多くのリソースを消費します。 – Xantham

+0

私はそれが組み込まれていない理由は、システム時間が変更される可能性があるということです。誤解を招くことがあります(スケジュールは "決して"消えません) –

+0

それは理にかなっていますが、あなたのシステム時間は時間を計られた仕事をしている間。それがちょうど時間の同期の変更だった場合、正確な時間(時間同期中にスキップされる可能性があります)を待つ代わりに、if(time> set_time)を実行すると思います。 – Xantham

関連する問題