C#事件/基于时间的代码执行
在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;
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
...
*/