【发布时间】:2014-01-08 20:44:55
【问题描述】:
我正在编写一个控制台程序,我的代码如下所示:
配置.cs
public static class Configuration
{
public static string Message = "";
}
菜单.cs
class Menu
{
public static void showMenu()
{
Console.Clear();
Console.WriteLine("1: SOMETHING");
Console.WriteLine("2: SOMETHING");
Console.WriteLine("3: SOMETHING");
Console.WriteLine("SYSTEM MSG: " + Configuration.Message);
Console.Write("INPUT: ");
}
}
程序.cs
...
static void Main(string[] args)
{
...
int choice;
while(true)
{
Menu.showMenu();
choice = Convert.ToInt32(Console.ReadLine());
switch(choice)
{
case 1:
Configuration.Message = "HELLO!";
break;
case 2:
Configuration.Message = "HI!";
break;
case 3:
Configuration.Message = "WHAT?!";
break;
}
}
}
...
现在,当我更改 Configuration.Message 时,它会显示在菜单上,因为 showMenu 方法会清除控制台并再次显示字符串。
但我想做的是没有 Clear 方法,我想实时显示 Configuration.Message。我在想使用 Timer 并每秒刷新一次菜单,但效率不高(感觉像作弊)。我该怎么做?
【问题讨论】:
-
控制台消息和显示实时字符串不是兼容的想法。 Winforms 或 WPF 应用程序可以通过用户输入实时显示,因为您有多个线程。控制台确实不是为此而构建的。
-
@paqogomez 不是多线程使它在其他类型的 GUI 中工作,而是你有完全不同的媒体来显示输出和收集输入。控制台将两者混合在一起的事实是导致问题的原因。
-
请注意,控制台/终端输入/输出为人们工作了很长时间......我认为这里的问题是 OP 依赖于控制台的绝对默认行为,这确实很难混合输入和输出 - 接管输入/输出(即使只是使用
Console.SetCursorPosition打印到特定位置)将使其成为可能。
标签: c# multithreading real-time