我想从控制台读取一个非阻塞读取功能。从C#中的标准I/O读取非阻塞读取#
回答
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);
你不忘记count参数吗? – CodesInChaos 2011-04-11 12:01:03
...是的。谢谢! – spender 2011-04-11 12:06:01
什么时候你的'EndRead'被触发?我认为只有当你到达流的末尾,或缓冲区已满时,而不是只有几个字符的输入可用。 – CodesInChaos 2011-04-11 12:11:16
Richard Dutton对his blog一个解决方案:
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
}
'ConsoleKeyInfo'包含'KeyChar'字段,它代表'char'表示,这可能是OP想要的。 – CodesInChaos 2011-04-11 11:35:13
哎。真?尽可能快地旋转一个循环,直到有钥匙可用?这很愚蠢。 – spender 2011-04-11 11:44:10
@spender这就是为什么在那里有'//做些更有用的评论'的原因。 – CodesInChaos 2011-04-11 11:48:26
- 1. 非阻塞从标准输入读取
- 2. stdin的非阻塞读取?
- 3. 非阻塞键盘读取 - C/C++
- 4. 如何从标准输入读取非阻塞?
- 5. 如何从标准输入读取非阻塞?
- 6. 读取非阻塞文件
- 7. 从非阻塞的SocketChanel读取信息
- 8. Python非阻塞pn532标签读取
- 9. 从阻塞IEnumerable中读取
- 10. Ruby中的缓冲/ RingBuffer IO + Amazon S3非阻塞区块读取
- 11. Android非阻塞从套接字读取
- 12. 从管道读取阻塞
- 13. 定时读取文件能否受益于非阻塞IO?
- 14. 管道上的非阻塞读取
- 15. Perl IO :: Socket/IO :: Select - 从“准备读取”套接字读取
- 16. * R *非阻塞控制台读取R
- 17. 红宝石非阻塞行读取
- 18. Linux阻塞与非阻塞串行读取
- 19. 阻塞和非阻塞读取之间有什么区别?
- 20. 的BufferedReader从process.getErrorStream读取时阻塞()
- 21. Java无阻塞读取
- 22. 流读取阻塞UDP GNAT
- 23. C- Unix套接字 - 无阻塞读取
- 24. 从std :: cin读取非阻塞读取与std :: this_thread :: sleep_for()或std :: this_thread :: yield()(IPC)
- 25. 非阻塞从http流中读取/记录
- 26. 从消息队列中读取(非阻塞如果空)
- 27. 使用STOMP从ActiveMQ队列中读取非阻塞事务
- 28. Python - 如何在subprocess.Popen中从PIPE读取非阻塞?
- 29. 从多个子进程中读取非阻塞(Python)
- 30. C socket:非阻塞方式读取\ n分离的命令
为什么这不是一个真正的问题?我理解它是重复的,但是“不是真正的问题”对我来说很陌生。 – CodesInChaos 2011-04-11 11:33:38
@Mitch小麦:是不是ReadKey阻止? – jgauffin 2011-04-11 11:36:37
@Mitch你至少需要'KeyAvailable'和'ReadKey'。而且我还不确定这是否是正确的做法,以及它如何与重定向输入或死锁进行交互。所以这当然不是一个小问题。 – CodesInChaos 2011-04-11 11:37:24