是否可以将C#控制台应用程序输出文本添加到已绘制的标签中? 我见过一些原生的win 32控制台应用可以做到这一点。
屏幕上的用户看到了:
进度:1%或进度:50%取决于标签的更新时间(标签进度保持在同一位置,而只有进度百分比的值得到更新。
而不是我知道当前如何执行的唯一方法是console.writeLine,它将为每个Progress更新生成一个单独的行。
EG:
进展:1%
进展:2%
答案 0 :(得分:9)
是的,你可以这样做。
您可以在写完后使用Console.SetCursorPosition重新定位光标。
例如:
Console.WriteLine("Starting algorithm...");
int line = Console.CursorTop;
for (int i=0;i<100;++i)
{
Console.SetCursorPosition(0,line);
Console.Write("Progress is {0}% ",i); // Pad with spaces to make sure we cover old text
Thread.Sleep(100);
}
Console.SetCursorPosition(0,line);
Console.WriteLine("Algorithm Complete. "); // Pad with spaces to make sure we cover old text
答案 1 :(得分:1)
答案 2 :(得分:0)
虽然我已经接受了答案:这是下一个人的动态例子:
private static List<screenLocation> screenLocationsBasic = new List<screenLocation>();
public class screenLocation
{
public int Left { get; set; }
public int Top { get; set; }
public screenLocation(int left, int top)
{
this.Left = left;
this.Top = top;
}
}
然后在模板绘制阶段,您可以添加动态元素,具体取决于循环中有多少项:
screenLocationsBasic.Add(new screenLocation(Console.CursorLeft , Console.CursorTop ));
然后在数据呈现期间,您可以根据您正在处理的项目更新该位置:
Console.SetCursorPosition(screenLocationsBoth[pos].Left, screenLocationsBoth[pos].Top);
然后您需要做的就是传递pos(循环中项目的位置)。
答案 3 :(得分:-1)
您可以清除窗口并每次重绘屏幕,这应该足够快,看起来已经发生了变化。