showing percentage in .net console application
我有一个控制台应用程序执行一个漫长的过程。
我将在新行中打印完成百分比,每完成1%。
如何使程序在控制台窗口的同一位置打印出完成百分比?
- 另请参阅相关问题:stackoverflow.com/questions/888533/…
- 我认为退格法可能是最好的(也是最可移植的),不过需要稍微多做一些工作。
打印
返回行首(但不要打印新行!)
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| using System;
using System.Threading;
class Test
{
static void Main()
{
for (int i=0; i <= 100; i++)
{
Console.Write("
{0}%", i);
Thread.Sleep(50);
}
}
} |
- 是的,这是最简单的方法。确保(如果您将它用于可变长度的字符串)记住在行尾用空格覆盖。例如,将"99%完成"替换为"完成!"将显示"完成!完成"-不理想。:)
- 你犯了一个错误:p
- 乔恩·斯基特:对不起,似乎栈溢出不会让我把罗尼的编辑回滚到你的帖子上。请自己试试。
- 也许值得注意的是,当在非Windows操作系统上运行时,此代码将不起作用。我建议采用SecCursorPosition方法。
- @丝滑:我刚用Mono在Linux上运行过,它没有问题。然而,使用你的建议并没有-因为它把百分比放在屏幕的顶部,而不是和"你好:"放在同一行。当然,这是可以修复的,但它确实显示了简单解决方案的优势:)
- 好吧,我还是会冒险猜测,在Mac电脑上,它会进入一条新的线路。当然,除非您也设置了正确的行,否则seccursorpos不起作用。
- @丝滑:在MacOS X上,我希望它会很好——我相信只有MacOS 9将
视为新线。有没有针对MacOS 9的.NET实现?
- 如果打印的是可变长度字符串(即小数点或%都可以减小或减小),则可以将对齐方式添加到格式字符串中:"{0,3}%"(最多对齐3个空格)、添加占位符0的"{0:000.0}%"或添加尾随空格以覆盖暴露的字符"{0}% _ _ _ _ _"<由so删除的空白=>
您可以使用:
1
| Console.SetCursorPosition(); |
号
适当地设置位置。
就像这样:
1 2 3 4 5 6 7 8
| Console.Write("Hello :");
for(int k = 0; k <= 100; k++){
Console.SetCursorPosition(8, 0);
Console.Write("{0}%", k);
System.Threading.Thread.Sleep(50);
}
Console.Read(); |