如果没有键输入,C#Mono控制台app会停止输出

时间:2016-03-14 22:23:57

标签: c# linux mono console raspberry-pi

我在Linux下的Mono 4.1上看到了一个奇怪的行为(Raspbian Jessye,Raspberry Pi 2)。

考虑这个程序:

    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分钟,非常圆的数字在我看来是巧合......),但在此之后输出冻结,但程序继续运行。

我已经测试了所有内容,似乎没有键盘输入,经过一段时间后控制台停止刷新,按任意键后控制台再次开始工作一段时间然后再次冻结。

显然,当按下按键时,此测试程序会停止,但在我的真实程序中输入被消耗,因为我知道控制台在任何按键操作后再次工作(我只是消耗它,我不做任何事情输入)。此外,我已经检查过按任何其他键,例如锁定号码,它还继续工作,在示例和真实程序上。

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

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

1 个答案:

答案 0 :(得分:0)

好的,将我的搜索引导到linux和raspberry而不是mono和C#我发现了我的问题。

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

我有一个连接到rpi的SPI屏幕,看起来它的驱动程序编程非常糟糕,它们有一些错误,其中一个没有响应消隐(也许SPI屏幕不知道它?dunno)所以当我看到控制台没有响应它是因为它被消隐并且没有写入输出,我只是没有注意到因为屏幕根本没有被清除。

而且消隐,似乎Debian有一个bug甚至配置/ etc / kbd / config和/boot/config.txt,如here所描述的那样它没有用,但是发出了 sudo sh -c “TERM = linux setterm -blank 0> / dev / tty0”如上一个链接所说的那样工作,所以我创建了一个脚本来启动我的应用程序,现在它可以工作了。