簡體   English   中英

服務器重新啟動的C#定時消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM