C# 非阻塞监听键盘输入

  最新写一个基于控制台的小程序,想要达到用键盘控制程序的暂停和退出,即:

  定义运行标志bool RunFlag=true,退出标志bool ExitFlag=false。

  程序并不断检测键盘,如果检测到有按键且不是按下“X”键,则RunFlag=!RunFlag;如果检测是按下“X”,则ExitFalg=!ExitFlag。如果RunFlag为true则执行程序预定任务A,如果ExitFlag为true,则退出。

  键盘检测用ReadKey函数获取用户的键盘输入,但是这样会一直等待用户输入,造成程序的阻塞。如果另开一个线程检测用户输入键盘输入,在程序程序任务A循环中,键盘键盘输入的线程貌似一直挂起,按键盘没有反应。

  后来在Stackoverflow上找到了答案(Non-Blocking read from standard I/O in C# [closed]),代码如下:

   1:  while (true)  
   2:  {  
   3:      if (Console.KeyAvailable)  
   4:      {  
   5:          ConsoleKeyInfo key = Console.ReadKey(true);  
   6:          switch (key.Key)  
   7:          {  
   8:              case ConsoleKey.F1:  
   9:                  Console.WriteLine("You pressed F1!");  
  10:                  break;  
  11:              default:  
  12:                  break;  
  13:          }  
  14:      }  
  15:      // Do something more useful  
  16:  } 

 

 

MSDN(http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/f6ceed23-36dd-49ac-96a7-9aca8f5a33b7)上也提到了解决的办法(Poll with the Console.KeyAvailable property.  When it returns True, ReadKey() won't block.先检测Console.KeyAvailable状态,如果true说明有按键,再获取键盘输入并处理,这样就不会有等待用户输入的阻塞问题了)

转载于:https://www.cnblogs.com/followyourheart/archive/2013/03/11/2953572.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值