2012-01-20 12 views
-1

私は現在、何秒も何度も何度もタスクを実行する必要のあるC#プロジェクトに取り組んでいます。何度も何度も何度も何度もイベントを実行します。

たとえば、コンソールに1秒ごとに5回書き込みます。私はこれをどうやってやることができますか?

ご協力いただきありがとうございます。

+0

正確には何が問題になっていますか?あなたは何をするのか分からないのですか? – Oded

+0

ここであなたの親友はループとタイマーです。 –

答えて

-2

この

While (true) 
{ 
for (int i=0; i<5; i++) 
{ 
console ("Hello"); 
} 
//this will pause for 1 sec (1000msec) 
Thread.sleep(1000); 
} 
+0

これはロックされるため、ユーザーインターフェイスのスレッドで作業している場合、これは良くありません。また、第2のタスクの1/5が行かなくても、OPが何か他のことをやりたければ、これは不可能です。タイマーまたは時間モジュラスチェックが良いでしょう。 –

+0

UI以外のスレッドでも、本番では実行すべきではありません。とにかくタイマーとしてはあまり信頼性がありません。 [詳細はこちら](http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx) –

4

Timerを使用し、Timer.Elapsedイベントにバインドおよびイベントを使用できます。

using System.Timers; 

サンプルコード:

Timer timer = new Timer(); 
timer.Elapsed += (sender, eventArgs) => 
{ 
    for (int i = 0; i < 5; i++) 
    { 
     Console.Write(i);    
    } 
}; 

が、これは、コンソールアプリケーションである、またはあなたが別のスレッドでこれを実行するのですか?

+0

あなたのサンプルコードには間隔が設定されておらず、5秒に1回ではなく、発生時に5回直接行に書き込まれます。 –

+0

私はこの質問を毎秒5回書くと解釈しました。もちろん、タイマーの間隔を5分の1秒に設定し、その場合はその行を解決策にすることができます。 – Aphelion

+0

@ dawmail333間隔と起動の呼び出しが不足していると認められましたが、OPにはxごとに5回書き込みが明記されています。 –

2

このような短いものについては、タイマーを使用してください。

System.Threading.Timer

そして:

System.Windows.Forms.Timer

前者はThreadPoolを使用し、後者はUIイベントを使用して、から選択するには、2つの主要なものがあります。彼らは、カスタムコードを配置するために、指定する間隔と間隔、およびコールバックメソッドまたは接続するイベントの両方を公開します。

長時間使用しない場合は、Windowsスケジューラ(OS 1)またはQuartz.NETなどのスケジューリングフレームワークを使用してスケジューリングを調べます。

タイマーの精度が異なることに注意してくださいではなく、実際に人間が

はまた、あなたができるようネジ付きタイマーのコールバックは、任意ThreadPoolスレッドに返されることに注意してください:-)を検出することができますマージン内で下さい実際にはコードを認識せずにコードを「マルチスレッド化」することになります。

System.Timers.Timerもあり、イベントを公開します。利用可能なさまざまなタイマーに関する記事can be found here

0

を試してみてください、私はそれはあなたに影響を与えるとは思わないが、それはまだ知っている価値がある - ウィンドウは、リアルタイムOSではありません。あなたがXミリ秒ごとに何かを行うことを頼むならば、それは正確ではないでしょう。

0

これを行うスレッドを作成することができます。たくさんの処理をしたい場合に特に便利です!以下は、1秒(1000ms)ごとに作業を行うスレッドの例です。

public void Start() 
{ 
    running = true; 
    thread = new Thread(new ParameterizedThreadStart(ThreadFunction)); 
    thread.Start(); 
} 

public virtual void ThreadFunction(object o) 
{ 
    var insert = false; 
    while (running) 
    { 
     //Do work 
     Thread.Sleep(1000); 
    } 
} 
関連する問題