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

C# 如何在C中使用定时器?,c#,C#,我希望我的函数每2秒执行一次,以检查是否有任何新用户,以便我可以为他们创建新日志。这是在控制台应用程序中,所以我使用了线程。但是我的控制台在运行一次该功能后关闭了。我希望只要我运行控制台,计时器就会运行,我的createLog函数将每2秒执行一次。我对C语言比较陌生,所以我对计时器的概念可能是完全错误的。请帮忙 namespace ConsoleApplication1 { class Program { public static Hashtable clien

我希望我的函数每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的内容,以保持应用程序的活动状态,直到用户想要关闭它。

可能会有所帮助

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

Winforms/控制台应用程序->


WPF->

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

我认为这不是问题所在。我删除了Timer对象,我的控制台工作正常,它确实需要我想要的,但是一旦我添加了Timer对象,控制台就会关闭down@qwrqwrcreateLog方法中是否存在异常?如果只调用createLog方法而不使用计时器,会发生什么?您向我们展示的代码在我的机器上每两秒钟执行一次,直到我按下enter键才停止。谢谢您的时间,但我想坚持使用timerOP详细的控制台应用程序First link比较了3个计时器,所有这些计时器都可以在控制台/Winform应用程序中使用。您使用的计时器类是什么?您的意思是