【发布时间】:2013-08-05 13:57:46
【问题描述】:
我有一个用 C# 编写的应用程序,它通过 while(true) 循环和 Console.ReadLine 连续接收用户的命令。
我也有通过控制台报告的各种后台操作。查看这个简单的例子:
class Program
{
static void Main(string[] args)
{
new Messager(1000 * 2.5f);
new Messager(1000 * 3);
while (true)
{
Console.ReadLine();
}
}
}
public class Messager
{
Timer Timer;
public Messager(double interval)
{
this.Timer = new Timer(interval);
this.Timer.Elapsed += (sender, e) =>
{
Console.WriteLine("message from " + this.Timer.Interval);
};
this.Timer.Start();
}
}
问题是,当我输入命令并且 Messager 在我按下 Enter 之前报告回来时,来自 Messager 的消息将被附加到我的当前行,并且光标将被放置到下一行。看这个截图:
正如你猜想的那样,我不想那样做。我希望命令的当前输入始终保留在最后一行,并将所有消息放在该行上方。正如您对此类应用程序所期望的那样。我如何做到这一点?
【问题讨论】:
-
我唯一的想法是只在
ReadLine()的末尾接收消息,这可能不是你想要做的,或者你可以用ReadKey()做一些事情,但这可能会很快就会变得一团糟。我确实认为您可以使用该方法到达您想要的位置。 -
我不认为可以做到...这一次,
Console.ReadLine()将在 Enter 上滚动,然后用户可以调整窗口大小... -
这是一个控制台。您想要的是一个底部带有命令输入区域的输出窗口。完全不是一回事。您可以通过制作一个看起来像这样的 winform / wpf 屏幕来模拟这种外观。
标签: c# multithreading console