C#事件/基于时间的代码执行

C#事件/基于时间的代码执行,c#,events,cron,C#,Events,Cron,在C#控制台应用程序中执行基于时间的事件的正确方法是什么 示例代码: namespace ServerTools { public class SaveWorld { public static int DelayBetweenWorldSaves = 15; public static bool IsEnabled = false; public static Thread th; public static bool IsRunning = false;

在C#控制台应用程序中执行基于时间的事件的正确方法是什么

示例代码:

namespace ServerTools
{
public class SaveWorld
{
    public static int DelayBetweenWorldSaves = 15;
    public static bool IsEnabled = false;
    public static Thread th;
    public static bool IsRunning = false;

    public static void Init()
    {
        if (IsEnabled && !IsRunning)
        {
            IsRunning = true;
            StartSave();
        }
    }

    private static void StartSave()
    {
        th = new Thread(new ThreadStart(Save));
        th.IsBackground = true;
        th.Start();
    }

    private static void Save()
    {
        while (IsEnabled)
        {
            int _playerCount = ConnectionManager.Instance.ClientCount();
            if (_playerCount > 0)
            {
                List<ClientInfo> _cInfoList = ConnectionManager.Instance.GetClients();
                ClientInfo _cInfo = _cInfoList.RandomObject();
                SdtdConsole.Instance.ExecuteSync("saveworld", _cInfo);
                Log.Out("[SERVERTOOLS] World Saved.");
            }
            Thread.Sleep(60000 * DelayBetweenWorldSaves);
        }
    }
}
}
我想用正确的方法学习

如果您必须在不同的时间运行不同的函数,那么该怎么办呢。像某些事件运行30秒,其他90秒?网络中是否也有一些东西可以让您像Cronjob一样执行网络功能


谢谢

大家一致认为是的,
定时器
更好。重新。使用多个计时器请参见。这里有几个示例
        public class Timer1
    {
        private static System.Timers.Timer aTimer;

        public static void Main()
        {
            // Normally, the timer is declared at the class level, 
            // so that it stays in scope as long as it is needed. 
            // If the timer is declared in a long-running method,   
            // KeepAlive must be used to prevent the JIT compiler  
            // from allowing aggressive garbage collection to occur  
            // before the method ends. You can experiment with this 
            // by commenting out the class-level declaration and  
            // uncommenting the declaration below; then uncomment 
            // the GC.KeepAlive(aTimer) at the end of the method. 
            //System.Timers.Timer aTimer; 

            // Create a timer with a ten second interval.
            aTimer = new System.Timers.Timer(10000);

            // Hook up the Elapsed event for the timer.
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

            // Set the Interval to 2 seconds (2000 milliseconds).
            aTimer.Interval = 2000;
            aTimer.Enabled = true;

            Console.WriteLine("Press the Enter key to exit the program.");
            Console.ReadLine();

            // If the timer is declared in a long-running method, use 
            // KeepAlive to prevent garbage collection from occurring 
            // before the method ends. 
            //GC.KeepAlive(aTimer);
        }

        // Specify what you want to happen when the Elapsed event is  
        // raised. 
        private static void OnTimedEvent(object source, ElapsedEventArgs e)
        {
            Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
        }
    }

    /* This code example produces output similar to the following:

    Press the Enter key to exit the program.
    The Elapsed event was raised at 5/20/2007 8:42:27 PM
    The Elapsed event was raised at 5/20/2007 8:42:29 PM
    The Elapsed event was raised at 5/20/2007 8:42:31 PM
    ...
     */