我正在编写一个简单的程序,为此,我想输出当前的cpu用法,但是使用标准的“ for”或“ while”循环,每次将其打印在新行上,让我展示一下意思是:
输出应为:
Current cpu usage: (usage)
使用情况每秒刷新一次
现在,我想每秒刷新一次,但是正如我提到的那样,使用for或while循环每次都会将其打印到新行,如下所示:
Current cpu usage: (usage)
(usage)
(usage)
(usage)
(usage)
那么,我该如何刷新“用法”?
顺便说一句,我对C#非常熟悉,所以您不必深入:)
谢谢
答案 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并不通用。