如何在C#中使用计时器?

时间:2012-05-11 04:26:46

标签: c#

我希望我的函数每2秒执行一次,以检查是否有新用户,以便我可以为它们创建一个新日志。这是在控制台应用程序中,所以我使用Thread。但是我的控制台在运行一次该功能后关闭了。我希望计时器能够运行,只要我运行控制台,我的createLog函数将每2秒执行一次。我对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. 

        }
  }

5 个答案:

答案 0 :(得分:0)

由于这是一个控制台应用程序,因此您需要添加Console.ReadLine()之类的内容,以保持应用程序处于活动状态,直到用户想要将其关闭为止。

答案 1 :(得分:0)

网上有很多关于如何使用计时器的教程。请仔细检查然后研究你的代码,以解决你可能犯的错误。 试试这个链接:http://www.dotnetperls.com/timer

答案 2 :(得分:0)

也许FluentScheduler可以提供帮助。

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);
    }
}

答案 3 :(得分:0)

答案 4 :(得分:0)

在调用Console.ReadLine以保持前台线程运行后,您需要阻塞调用Start。此外,您的Timer有资格进行垃圾收集,因为它在创建后不会再次引用。使用Main方法末尾的GC.KeepAlive来防止计时器被GC。