如果没有按键输入,C# Mono 控制台应用程序将停止输出

C# Mono console app stops output if no key input

我在 Linux(Raspbian Jessye,Raspberry Pi 2)下看到 Mono 4.1 控制台应用程序的奇怪行为。

考虑这个程序:

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

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

显然这个测试程序在按下一个键时停止,但在我的真实程序中输入被消耗,因为我知道控制台在任何按键按下后再次工作(我只是消耗它,我不这样做输入的任何内容)。此外,我已经检查过是否按下任何其他键,例如 lock num,并且它还在示例和实际程序中继续工作。

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

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

好的,将我的搜索指向 linux 和 raspberry 而不是单声道和 C# 我发现了我的问题。

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

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

而且空白,似乎 Debian 有一个错误,甚至按照描述配置 /etc/kbd/config 和 /boot/config.txt here 它没有工作,但是发出 sudo sh -c "TERM=linux setterm -blank 0 >/dev/tty0" 如前所述 link 确实有效,所以我创建了一个脚本来启动我的应用程序,现在它可以工作了。