0

これ簡単に解決できないため、ファイル/バッファに文字列を1行ずつ書き込む1つのスレッドと、同じファイル/バッファからそれらの文字列を1行ずつ読み取るConsole.WriteLine()別のスレッドを実装するにはどうすればよいですか? 私はする必要があると思います:

  • コンソールをファイル/バッファにリダイレクト
  • read file / buffer thread save、行が書き込まれると、他のスレッドによって読み取られる必要があります
  • それを非同期にします(いいえ、ライブReadToEnd()でなければなりません)
4

2 に答える 2

1

複数のスレッドから 1 つの共有ファイルに読み書きできるようになるメモリ マップト ファイルを試してください。コンソールのリダイレクトについては、次を試してください。

Console.SetIn

Console.SetOut

于 2013-01-07T11:43:36.217 に答える
0

私はバッファでそれをしたいと思います。

ファイルを使用したソリューション:

    class Program
    {
        private static bool terminated = false;

        private static void listen()
        {
            StreamReader file = new StreamReader(new FileStream("C:/test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
            while (!terminated || !file.EndOfStream)
                if (!file.EndOfStream)
                {
                    string text = file.ReadLine();
                    MessageBox.Show(text); // display it
                }
        }

        static void Main(string[] args)
        {
            StreamWriter sw = new StreamWriter(new FileStream("C:/test.txt", FileMode.Create, FileAccess.Write, FileShare.Read));
            sw.AutoFlush = true;
            Console.SetOut(sw);
            new Thread(new ThreadStart(listen)).Start();
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(250);
                Console.Out.WriteLine("hello world - " + i);
            }
            terminated = true;
        }
    }

行ごとに動作し、1 つも見逃すことはありません。

于 2013-01-07T12:00:28.610 に答える