一次读取随机长度的字符

Reading random length of characters at a time

我正在尝试在控制台应用程序上读取一次输入的一系列字符:

  while(true)
  {     
    var input= string.Empty;
    do
    {
        var key = Console.ReadKey();    
        input += key.KeyChar;              
    }
    while (input.Length <= 5);

    //do something with input.
  }

因为没有回车 return,我可以通过为输入设置固定长度来完成这项工作。但实际上我不知道一次要输入多少个字符......它可能是 1 - 10 之间的任何地方。无论如何修改上面的代码以便应用程序可以接受一次输入的任何内容?唯一分隔不同输入的是时间(至少可以假设 2 或 3 秒),因为没有回车 return.

我认为使用超时来决定用户是否完成是一个可怕的想法,你可以通过这样的方式实现它:

var input = string.Empty;
var lockObj = new Object();
System.Threading.Timer timer = new System.Threading.Timer(o =>
{
    string localInput;
    lock(lockObj)
    {
        localInput = input;
        input = string.Empty;
    }
    Console.WriteLine("\noutput: {0}", localInput);

}, null, System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);   
while (true)
{
    var key = Console.ReadKey();
    timer.Change(2000, System.Threading.Timeout.Infinite);
    lock(lockObj)
    {
        input += key.KeyChar;
    }
}

你在按下一个键时启动一个计时器(取消之前的任何一个)并且当该计时器到期时(假设它没有被另一个按键取消),你用当前在[=11中的任何值做一些事情=].注意:因为你现在是多线程的,所以你需要担心你正在做的某事是什么以及它是否是thread-safe。您可能需要锁定或同步。