如何不打印到换行C#控制台

时间:2019-05-01 18:13:48

标签: c#

我正在编写一个简单的程序,为此,我想输出当前的cpu用法,但是使用标准的“ for”或“ while”循环,每次将其打印在新行上,让我展示一下意思是:

输出应为:

Current cpu usage: (usage)

使用情况每秒刷新一次

现在,我想每秒刷新一次,但是正如我提到的那样,使用for或while循环每次都会将其打印到新行,如下所示:

Current cpu usage: (usage)
(usage)
(usage)
(usage)
(usage)

那么,我该如何刷新“用法”?

顺便说一句,我对C#非常熟悉,所以您不必深入:)

谢谢

2 个答案:

答案 0 :(得分:5)

您没有在将输出写入控制台的地方显示代码,但是如果您不想编写新行,则可以使用Console.Write(message);和{{1}的组合}(将光标再次重置到行首)。

例如:

Console.SetCursorPosition

答案 1 :(得分:4)

单独使用\r字符可将插入符号(“打印头”)返回到第一列。这不是编写\r\n(Windows / DOS换行序列)或\n(Unix / Linux)给您换行的方法。

在内部,Console.WriteLine( String x )Console.Write( String x ); Console.Write( Environment.NewLine );是同一件事(在Windows上,Environment.NewLine"\r\n")。

尝试一下:

while( true )
{
    Single cpuUsage = GetCpuUsage();
    Console.Write( "Current CPU usage: {0,5:P2}", cpuUsage );
    Console.Write( "\r" );

    await Task.Delay( 500 );
}

请注意,如果下一行比上一行短,则可能需要打印出一行空白以覆盖任何上一文本,因为前一文本将在那里。 (但是使用{0,5:P2}可以确保该文本始终包含5个字符(无论是1%还是100%-或使用{0,-5:P2}都是左对齐数字)代替。)

该技术还可以在使用与C#/。NET相同的stdin / stdout语义的其他平台中使用,包括C,C ++,Java等,而Console.SetCursorPosition API并不通用。