如何制作高效的控制台更新程序

时间:2019-02-08 09:45:29

标签: c#

当前我想显示以下变量

总项目

总执行力

完成状态

using System;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int TotalValue = 250; // Total Item Example
            int TotalExecution = 0;
            bool Finish_Status = false;
            for (int i = 0; i < TotalValue; ++i)
            {
                //Do Work Here
                System.Threading.Thread.Sleep(10); // Example Work
                TotalExecution++;
                if (TotalValue - TotalExecution == 0)
                {
                    Finish_Status = true;
                }
                Console.Clear();
                Console.Write("Progression Info\n             Total Item : {0}\n             Execution Total : {1}\n             Remaining : {2}\n             Finish_Status : {3}", TotalValue,TotalExecution, TotalValue - TotalExecution, Finish_Status); // Display Information To Console
            }
            Console.ReadLine();
        }
    }
}

结果很好,但是我想知道是否有更有效的方法,最好不使用Console.Clear();进行更新

2 个答案:

答案 0 :(得分:2)

您可以使用Console.SetCursorPosition在每次写入时在控制台缓冲区周围移动光标,而不是每次都清除控制台。

例如:

using System;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int TotalValue = 250; // Total Item Example
            int TotalExecution = 0;
            bool Finish_Status = false;
            Console.Write("Progression Info\n             Total Item : \n             Execution Total : \n             Remaining : \n             Finish_Status : ");
            for (int i = 0; i < TotalValue; ++i)
            {
                //Do Work Here
                System.Threading.Thread.Sleep(10); // Example Work
                TotalExecution++;
                if (TotalValue - TotalExecution == 0)
                {
                    Finish_Status = true;
                }
                Console.SetCursorPosition(26, 1);
                Console.Write(TotalValue);
                Console.SetCursorPosition(31, 2);
                Console.Write(TotalExecution);
                Console.SetCursorPosition(25, 3);
                Console.Write(TotalValue - TotalExecution);
                Console.SetCursorPosition(29, 4);
                Console.Write(Finish_Status);
            }
            Console.ReadLine();
        }
    }
}

免责声明:显然,以上内容很简单,可以从大量的改进中受益,但您明白了。

答案 1 :(得分:0)

欢迎kepanin_lee

我认为您正在寻找类似的东西。

//Console.Clear()
Console.Write(vbCr & "Progression Info\n...

仅从vbCr开始,通过这种方式,您可以强制从同一行的开头开始,因此仅覆盖最后一行,而不会清除所有屏幕。