一次读取随机长度的字符
本文关键字:字符 随机 读取 一次 | 更新日期: 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
中的任何值执行某些操作。注意:由于你现在是多线程的,你需要担心你正在做的东西是什么,以及它是否是线程安全的。您可能需要锁定或同步。