2016-03-14 73 views
0

我看到在Linux下的Mono 4.1上的控制台应用程序(Raspbian Jessye,Raspberry Pi 2)上的一个奇怪的行为。C#单控制台应用程序停止输出,如果没有键输入

考虑此程序:

static void Main(string[] args) 
    { 
     Console.Clear(); 

     while (true) 
     { 
      if (Console.KeyAvailable) 
      { 
       Console.ReadKey(); 
       return; 
      } 

      Thread.Sleep(500); 

      Console.SetCursorPosition(0, 0); 
      Console.WriteLine(DateTime.Now.ToString()); 
     } 

    } 

应该在屏幕上更新,直到键被按下的日期。它在一段时间内接近10分钟(几乎精确10分钟,非常整数是我看来的巧合),但在此之后输出冻结,但程序继续运行。

我已经测试了一切,看起来如果没有键盘输入,一段时间后控制台停止刷新,任何按键后控制台开始再次工作一段时间,然后再冻结。

很显然,当一个按键被按下时,这个测试程序会停止,但是在我的真实程序中输入被消耗,因为我知道控制台在任何按键后都会再次工作(我只是消耗它,我什么都不做与输入)。此外,我已经检查过按下其他任何按键,如锁数字,它也继续工作,在示例和真正的程序。

这是一个已知的错误吗?预期的行为?

任何解决方法?我正在创建一个监视某些服务的控制台应用程序,并且当我想查看真实数据时,非常烦人不得不按下一个键。

回答

0

好吧,将我的搜索引导到linux和覆盆子,而不是单声道和C#我发现我的问题。

它来自两个来源,我已附加的屏幕和Linux控制台消隐。

我有一个SPI屏幕连接到rpi,它似乎是司机是非常糟糕的程序,他们有一些错误,其中一个是没有响应的消隐(也许SPI屏幕不知道它?不知道)所以当我看到控制台没有响应时,这是因为它是空白的,没有输出,我只是没有注意到,因为屏幕没有被清除。

而下载看起来Debian有一个bug,甚至配置/ etc/kbd/config和/boot/config.txt,如here那样没有奏效,但是发行sudo sh -c“TERM = linux setterm -blank 0>/dev/tty0“正如前面的链接所说的那样,所以我创建了一个脚本来启动我的应用程序,现在它可以工作。

相关问题