2009-04-16 15 views
1

コンソールアプリケーションでタイマーを使用するにはどうすればよいですか?私は私のコンソールアプリケーションをバックグラウンドで動作させ、例えば10分ごとに何かをしたいと思っています。コンソールアプリケーションでタイマーを使用するにはどうすればよいですか?

どうすればいいですか?あなたは自分のコンソールアプリケーションごとに10分を実行するには、Windowsタスクスケジューラを使用することができます

おかげ

+4

注意:コンソールアプリケーションを強制終了するのは非常に簡単です。このバックグラウンドジョブが重要な場合は、Windowsサービスの実装を選択します。または、Wandについてのnandosの投稿を考えてみてください。 – boj

答えて

2

+0

これはおそらくこれを行う最善の方法です。 –

4

コンソールアプリケーションは、必ずしも長時間実行されることを意味しません。それが言われている、あなたはそれを行うことができます。コンソールが終了しないようにするには、Console.ReadLineでコンソールループを実行して、「quit」のような終了文字列を待つ必要があります。

コードを10分ごとに実行するには、System.Threading.Timerを呼び出して、実行メソッドに10分間隔でポイントします。

public static void Main(string[] args) 
{ 
    using (new Timer(methodThatExecutesEveryTenMinutes, null, TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(10))) 
    { 
     while (true) 
     { 
      if (Console.ReadLine() == "quit") 
      { 
       break; 
      } 
     } 
    } 
} 

private static void methodThatExecutesEveryTenMinutes(object state) 
{ 
    // some code that runs every ten minutes 
} 

EDIT

でも、私はあなたの質問に日銀のコメントが好きです。長時間実行するアプリケーションが本当に必要な場合は、それをWindowsサービスにするオーバーヘッドを考慮してください。開発オーバーヘッドがありますが、コードを実行するためにはるかに安定したプラットフォームが得られます。

+1

ありがとうございますが、このサンプルコードは動作しません – Gold

+0

何が問題になりませんか?私はそれを投稿する前に私はそれをテストしました。 methodThatExecutesEveryTenMinutesにConsole.WriteLineを置き、FromMinutes(10)をFromSeconds(5)に変更して検証するだけです。 5秒ごとにコンソールに出力されます。 –

+0

@MichaelMeadowsあなたの答えは私が探しているものですが、コンソールサービスを開いたままにしておくと、Windowsサービスはconsole.writelineなどのフィードバックを出力しません。プログラムの出力をチェックして、正常に動作していることを確認できます。それは自己報告のようなものです。 –

関連する問題