C# .NET控制台应用程序,是否可以创建标签和区域?
是否可以让C#控制台应用程序将文本输出到已绘制的标签? 我见过一些原生Win32控制台应用程序可以做到这一点 因此,用户可以在屏幕上看到: 进度:1%或进度:50%,具体取决于标签的更新时间(标签进度保持在同一位置,而只有进度百分比的值得到更新) 而不是我目前知道的唯一方法,即console.writeLine,它将为每个进度更新生成一个单独的行 例如: 进展:1%C# .NET控制台应用程序,是否可以创建标签和区域?,c#,C#,是否可以让C#控制台应用程序将文本输出到已绘制的标签? 我见过一些原生Win32控制台应用程序可以做到这一点 因此,用户可以在屏幕上看到: 进度:1%或进度:50%,具体取决于标签的更新时间(标签进度保持在同一位置,而只有进度百分比的值得到更新) 而不是我目前知道的唯一方法,即console.writeLine,它将为每个进度更新生成一个单独的行 例如: 进展:1% 进度:2%您可以每次清除窗口并重新绘制屏幕,速度应该足够快,看起来事情已经发生了变化。是的,您可以这样做 您可以使用在写入后重新定
进度:2%您可以每次清除窗口并重新绘制屏幕,速度应该足够快,看起来事情已经发生了变化。是的,您可以这样做 您可以使用在写入后重新定位光标 例如:
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
Console.WriteLine(“启动算法…”);
int line=Console.CursorTop;
对于(int i=0;i请看一看,尽管我已经接受了答案:下面是下一个家伙的动态示例:
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;
}
}
然后,在数据呈现期间,您可以根据正在处理的项目仅更新该位置:
Console.SetCursorPosition(screenLocationsBoth[pos].Left, screenLocationsBoth[pos].Top);
然后,您只需传递pos(循环中项目的位置)。“返回当天”,我们将输出退格字符,以便在“进度:”之后将光标移回标签。在更高级的终端上,我们会使用转义序列来定位光标。为什么不使用Windows任务调度程序每隔10毫秒左右启动一个控制台应用程序的新实例呢?对于匿名者-1,使用更快的机器:)@MusiGenesis-我写的控制台应用程序足够快,不需要进度更新…不是我-我喜欢以“3”结尾的代表分数。@ck:我写的控制台应用程序速度如此之快,以至于你根本看不到伪DOS窗口。:)
Console.SetCursorPosition(screenLocationsBoth[pos].Left, screenLocationsBoth[pos].Top);