0

由于不能轻易解决,我如何实现 1 个线程逐行使用Console.WriteLine()字符串写入文件/缓冲区,另一个线程也逐行从同一文件/缓冲区读取这些字符串?我想我需要:

  • 将控制台重定向到文件/缓冲区
  • 读取文件/缓冲区线程保存,写入一行时必须由另一个线程读取
  • 使其异步(不ReadToEnd(),它必须是实时的)
4

2 回答 2

1

尝试内存映射文件,它将允许您从多个线程读取写入一个共享文件。至于重定向控制台尝试:

控制台.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;
        }
    }

逐行工作,不会错过任何一个。

于 2013-01-07T12:00:28.610 回答