一次读取随机字符长度

时间:2016-01-07 19:54:27

标签: c# .net string console-application

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

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

    //do something with input.
  }

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

1 个答案:

答案 0 :(得分:5)

因为我认为使用超时来确定用户是否完成,这是一个可怕的想法,你可以用这样的东西来实现它:

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;
    }
}

当按下某个键并且当该计时器到期时(假设它没有被另一个按键取消),你启动一个计时器(取消任何一个计时器),你做了一些事情,无论目前在{{1 }}。注意:由于您现在处于多线程状态,因此您需要担心您正在做的某些是什么以及它是否是线程安全的。您可能需要锁定或同步。