[英]C# Timed Messages from a server restart
private void WorkerThread()
{
AppConsole.Log("Restarter Worker Thread Started", ConsoleColor.Green);
DateTime nextRestart = GetRestartTime(); //--- Fetch next restart
AppConsole.Log(String.Format("Selected next restart date: {0}", nextRestart.ToString("F")), ConsoleColor.Green);
_workerRunning = true;
while (_workerRunning) {
_waitHandle.WaitOne(1000);
TimeSpan timeLeft = nextRestart.Subtract(DateTime.Now);
SendMessage(String.Format("Time until next restart: {0} hours, {1} minutes, {2} seconds.",
timeLeft.Hours, timeLeft.Minutes, timeLeft.Seconds));
if (timeLeft.CompareTo(TimeSpan.Zero) < 0)
DoRestart();
}
基本上,如果服務器距離重新啟動超過10分鍾,那么我需要從該線程每5分鍾輸出一條消息,如果服務器距離啟動不到10分鍾,則需要每2.5分鍾輸出一條消息。 我只是想知道什么是最好的方法。
干杯
您不需要一個線程,您需要一個計時器。
DateTime nextRestart = GetRestartTime();
AppConsole.Log("Restarter timer started", ConsoleColor.Green);
Timer t = new Timer();
t.Tick += (o, e) =>
{
TimeSpan timeLeft = nextRestart.Subtract(DateTime.Now);
if (timeLeft.CompareTo(TimeSpan.Zero) < 0)
{
t.Stop();
DoRestart();
}
else
{
SendMessage(String.Format("Time until next restart: {0} hours, {1} minutes, {2} seconds.",
timeLeft.Hours, timeLeft.Minutes, timeLeft.Seconds));
if (timeLeft.CompareTo(TimeSpan.FromMinutes(5)) < 0)
t.Interval = 150 * 60 * 1000; // ms
else if (timeLeft.CompareTo(TimeSpan.FromMinutes(10)) < 0)
t.Interval = 300 * 60 * 1000; // ms
}
};
t.Interval = (nextRestart - DateTime.Now).Milliseconds;
t.Start();
您需要的所有代碼都放在一個整齊的程序包中。 您甚至可以將其包裝在一個類中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.