2个主题,1个文件

时间:2013-01-07 11:26:08

标签: c# multithreading file stream

由于this无法如此轻易地解决,我如何使用Console.WriteLine()和另一个线程逐行实现字符串到文件/缓冲区的1个线程逐行读取来自同一文件/缓冲区的字符串?我想我需要:

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

2 个答案:

答案 0 :(得分:1)

尝试Memory-Mapped files它将允许您从多个线程读取对一个共享文件的写入。至于重定向控制台尝试:

Console.SetIn

Console.SetOut

答案 1 :(得分: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;
        }
    }

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