如何在等待输入时阻止stdin?

时间:2015-10-20 08:41:04

标签: c# stdin nativeapplication

我正在编写使用本机消息传递的Chrome扩展程序,但一切正常。我在本机应用程序方面解决的问题。

Chrome扩展程序使用stdin和stdout与本机应用程序进行通信,我无法找到一种很好的监听输入方式。

现在我的代码看起来像这样:

using (Stream stdin = Console.OpenStandardInput(),
          stdout = Console.OpenStandardOutput())
{

    while (true)
    {
        var input = ReadInputFromStream(stdin);

        if (input == string.Empty)
        {
            System.Threading.Thread.Sleep(50);

            continue;
        }

        // Do some work and send response
    }
}

ReadInputStream方法:

private static string ReadInputFromStream(Stream stream)
{
    var buff = new byte[4];

    stream.Read(buff, 0, 4);

    var len = BitConverter.ToInt32(buff, 0);

    buff = new byte[len];
    stream.Read(buff, 0, len);

    return Encoding.UTF8.GetString(buff);
}

我真的想避免睡眠,而是在收到输入之前阻止应用程序。 Stream.Read返回零,因为没有找到数据,因此它会保持循环。

这个问题有一个很好的解决方案吗?

0 个答案:

没有答案