一次读取随机长度的字符

本文关键字:字符 随机 读取 一次 | 更新日期: 2023-09-27 18:29:29

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

  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秒),因为没有回车。

一次读取随机长度的字符

所以,尽管我认为使用超时来决定用户是否完成是一个可怕的想法,但你可以用这样的东西来实现:

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

当按下一个键时,您启动一个计时器(取消任何以前的计时器),当计时器到期时(假设它没有被另一个键取消),您将使用当前input中的任何值执行某些操作。注意:由于你现在是多线程的,你需要担心你正在做的东西是什么,以及它是否是线程安全的。您可能需要锁定或同步。