繁体   English   中英

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

[英]How to use timer in C#?

我希望每2秒执行一次我的函数,以检查是否有任何新用户,以便为他们创建新日志。 这是在控制台应用程序中,所以我使用了线程。 但是我的控制台在运行一次功能后关闭了。 我希望计时器能够一直运行到控制台,并且我的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. 

        }
  }

由于这是一个控制台应用程序,因此您需要添加类似Console.ReadLine()以使该应用程序保持活动状态,直到用户希望将其关闭。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM