如何读取用户编写的内容(不按enter键)-控制台C#

如何读取用户编写的内容(不按enter键)-控制台C#,c#,console-application,C#,Console Application,好吧,问题的标题可能有点不对劲,但我没想到会更好,所以这里是: 我想阅读用户输入的“到目前为止”,我需要它这样工作:用户输入一些必需的数据,然后被询问他/她是否想要完整的进度输出或只是结果 当然,我可以给ReadLine打电话,看看他/她写了什么,但我想让他/她写得更整洁一些——在最后的数据输入之后,他/她会被要求提供详细信息。程序将像2秒一样等待,然后“读取”用户编写的内容。如果没有,程序将正常运行,如果需要字符串,程序将提供详细的计算 我希望它是清楚的 谢谢你的回答 E:另一种方法是在这2秒

好吧,问题的标题可能有点不对劲,但我没想到会更好,所以这里是:

我想阅读用户输入的“到目前为止”,我需要它这样工作:用户输入一些必需的数据,然后被询问他/她是否想要完整的进度输出或只是结果

当然,我可以给ReadLine打电话,看看他/她写了什么,但我想让他/她写得更整洁一些——在最后的数据输入之后,他/她会被要求提供详细信息。程序将像2秒一样等待,然后“读取”用户编写的内容。如果没有,程序将正常运行,如果需要字符串,程序将提供详细的计算

我希望它是清楚的

谢谢你的回答

E:另一种方法是在这2秒钟后模拟按enter键,这样或那样都很好

回答 对于任何对工作代码感兴趣的人

bool timepassed = false;
bool detailmode = false;

long start = System.Environment.TickCount;

while (Console.KeyAvailable == false) // This loop will quit when KeyAvailable is true, i.e. a key is pressed (OR by the break command below)
{
    Console.Write("."); // write dot every 100ms to indicate progress
    System.Threading.Thread.Sleep(100);
    if (System.Environment.TickCount - start > 1250){
        timepassed=true; // if more than 1250ms passed, set flag break
        break;
    }
}

detailmode = !timepassed; // if time didnt pass, then user did press a key (and vice versa)->set detailmode
if (detailmode == true)
{
    Console.ReadKey(true); // hide the pressed key
    Console.WriteLine("\n\n-Detailni mod-"); // notify user about detailed mode
}

我怀疑您正在寻找
ReadKey
方法:

您需要依次处理每个按键,并在用户最后按enter键时自己重新生成整个命令

编辑:

如果您希望在设定的时间段后暂停,请查看此问题中的解决方案:


我最初误解了你的意图。

看看这两篇文章:

具体而言,MSDN文章有以下示例:

class Sample 
{
    public static void Main() 
    {
    ConsoleKeyInfo cki = new ConsoleKeyInfo();

    do {
        Console.WriteLine("\nPress a key to display; press the 'x' key to quit.");

// Your code could perform some useful task in the following loop. However, 
// for the sake of this example we'll merely pause for a quarter second.

        while (Console.KeyAvailable == false)
            Thread.Sleep(250); // Loop until input is entered.
        cki = Console.ReadKey(true);
        Console.WriteLine("You pressed the '{0}' key.", cki.Key);
        } while(cki.Key != ConsoleKey.X);
    }
}

编辑-根据您对输入的实际操作,您可能希望将其累积到缓冲区或
StringBuilder

中,您实际上是在控制台应用程序中查找
按键事件。我觉得这将是一个非常棘手的问题。你必须使用ReadChar而不是ReadLine。在尝试这样做之前,您可能需要考虑一些有意义的考虑因素。ReadChar只读取一个字符,您必须处理返回字符,不确定您认为它“更整洁”的原因对我来说听起来像是一个家庭作业….?您必须自己使用Console.ReadKey()实现Console.ReadLine()。例如:@DJKRAZE老实说,这是一个家庭作业,但完全无关。家庭作业是使用各种方法计算定积分(?),这只是我想添加的一个小功能(它甚至不必存在)。我不想因为我不能很快弄明白而放弃,这让我感到厌烦:)我认为ReadKey不会切断它。如果用户根本不按任何键,2秒钟后我希望程序继续。但ReadKey会一直等待按键。或者?@Magicmaster这就是MSDN示例中的
while
循环。您确实使用了
ReadKey
,但在等待其他按键时,您需要某种方法使应用程序保持活动状态;我最初误解了你的问题。到那边去,给他们一些放弃的选票。。。
ConsoleKeyInfo cki = Console.ReadKey();
Console.WriteLine(cki.Key.ToString());