1

ネイティブ メッセージングを使用する 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 は、データが見つからないためゼロを返すため、ループを続けます。

この問題に対する良い解決策はありますか?

4

0 に答える 0