我想要一个非阻塞的从控制台读取函数。我该如何在C#中编写?
Richard Dutton在他的博客上提供了一种解决方案:
while (true)
{
if (Console.KeyAvailable)
{
ConsoleKeyInfo key = Console.ReadKey(true);
switch (key.Key)
{
case ConsoleKey.F1:
Console.WriteLine("You pressed F1!");
break;
default:
break;
}
}
// Do something more useful
}
var buf=new byte[2048];
var inputStream=Console.OpenStandardInput(); //dispose me when you're done
inputStream.BeginRead(buf,0,buf.Length,ar=>{
int amtRead=inputStream.EndRead(ar);
//buf has what you need. You'll need to decode it though
},null);
EndRead
什么时候会被触发?我认为只有当你到达流的末尾或缓冲区已满时才会触发,而不是仅在输入的几个字符可用时触发。 - CodesInChaos
KeyAvailable
和ReadKey
结合起来。而且我仍然不确定这是否是正确的做法,以及它如何与重定向输入或死键交互。因此,这绝对不是一个简单的问题。 - CodesInChaos