• 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说明有按键,再获取键盘输入并处理,这样就不会有等待用户输入的阻塞问题了)

  • 相关阅读:
    线性单链表动态内存分配(C语言实现)
    线性顺序表动态内存分配(C语言实现)
    Linux-v01天-课堂笔记
    博客园之自定义博客(美化+播放器)
    递归练习
    算法基础练习-_06 二进制小数
    算法基础练习-_05将整数的奇偶位互换
    算法基础练习-_03 1的个数
    算法基础练习-_01找出唯一成对的数
    常用算法之快速排序
  • 原文地址:https://www.cnblogs.com/followyourheart/p/2953572.html
Copyright © 2020-2023  润新知