C#中标准I/O的非阻塞读取

Mas*_*oud 22 c# console-application nonblocking

我想从控制台获得非阻塞读取功能.我如何用C#编写?

odr*_*drm 47

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  
} 
Run Code Online (Sandbox Code Playgroud)

  • @spender这就是为什么那里有`//做一些更有用的评论'的原因. (17认同)
  • 这个答案非常适合我想要的.我有一个程序运行无限循环并输出东西,但我希望能够通过键盘字符输入命令而不会阻止循环. (4认同)
  • 当它不是控制台时,这实际上不会从标准输入读取! (2认同)

spe*_*der 7

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);
Run Code Online (Sandbox Code Playgroud)