2012-05-11 5 views
0

2秒ごとに自分の関数を実行して、新しいユーザーがいるかどうかを確認して、新しいログを作成できるようにします。これはコンソールアプリケーションにありますので、私はスレッドを使用しました。しかし、私のコンソールは一度機能を実行した後にシャットダウンします。私は、コンソールを実行している間、タイマーが実行され、createLog関数が2秒ごとに実行されることを期待しています。私はC#には比較的新しいので、タイマーの私の考え方は完全に間違っています。これは、ユーザーがそれをシャットダウンしたいまで生きアプリを保つためにConsole.ReadLine()のようなものを追加する必要がコンソールアプリですので...C#でタイマーを使うには?

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public static Hashtable clientsList = new Hashtable(); 


     static void Main(string[] args) 
     { 
      Timer t = new Timer(createLog, null, 0, 2000); 


      IPAddress ip = IPAddress.Parse("127.0.0.1"); 
      TcpListener serverSocket = new TcpListener(ip, 9888); 
      TcpClient clientSocket = default(TcpClient); 
      int counter = 0; 

      serverSocket.Start(); 
      .... //this main is monitoring the network.... 
      console.read(); 
     } 



private static void createLog(object state) 
     { 
     //this function checks the database and if there is new user it will create a new text file for he/she. 

     } 
    } 
+0

どのタイマークラスを使用していますか? –

+0

System.Threadingを使用して< を意味しました;>? –

答えて

0

ネットでは、タイマーの使い方について多くのチュートリアルがあります。間違いを犯す可能性があるので、タイマーを使ってコードを調べてください。 このリンクを試す:http://www.dotnetperls.com/timer

+0

私はこれらのことを読んで、私が書いたコードを思いついた。 –

0

が役に立ちます。

using FluentScheduler; 

public class MyRegistry : Registry 
{ 
    public MyRegistry() 
    { 
     // Schedule an ITask to run at an interval 
     Schedule<MyTask>().ToRunNow().AndEvery(2).Seconds(); 

     // Schedule a simple task to run at a specific time 
     Schedule(() => Console.WriteLine("Timed Task - Will run every day at 9:15pm: " + DateTime.Now)).ToRunEvery(1).Days().At(21, 15); 

     // Schedule a more complex action to run immediately and on an monthly interval 
     Schedule(() => 
     { 
      Console.WriteLine("Complex Action Task Starts: " + DateTime.Now); 
      Thread.Sleep(1000); 
      Console.WriteLine("Complex Action Task Ends: " + DateTime.Now); 
     }).ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0); 
    } 
} 
+0

お時間をいただきありがとうございますが、タイマーを付けたいです –

0

あなたは、フォアグラウンドスレッドの実行を維持するためにStartを呼び出した後Console.ReadLineなどのブロッキング呼び出しを必要としています。また、タイマーは作成後に再度参照されないため、ガベージコレクションの対象となります。 Mainメソッドの最後にGC.KeepAliveを使用して、タイマーがGCされないようにします。

+0

私はそれが問題だとは思わない。私はタイマーオブジェクトを削除し、私のコンソールはうまく動作しますが、私が欲しいのですが、タイマーオブジェクトを追加してからコンソールをシャットダウンすると、 –

+0

@qwrqwr 'createLog'メソッドに例外がありますか?タイマーなしで 'createLog'メソッドを呼び出すだけなら、どうなりますか?あなたが私たちに示したコードは、マシンに2秒ごとに実行されます。 –

関連する問題