2016-03-14 71 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「正如前面的鏈接所說的那樣,所以我創建了一個腳本來啓動我的應用程序,現在它可以工作。

相關問題