既然这不能这么容易解决,我怎么能实现一个线程,写字符串到文件/缓冲区一行一行使用Console.WriteLine()
和另一个线程,读取这些字符串从同一文件/缓冲区也行逐行?我想我需要:
- 重定向控制台到文件/缓冲区
- 读取文件/缓冲线程保存,当一行写入时,必须由另一个线程读取
- 使其异步(没有
ReadToEnd()
,它必须是live)
尝试内存映射文件它将允许您从多个线程读写一个共享文件。关于重定向控制台,请尝试:
控制台。装入的
控制台。一套
我想用缓冲区来做到这一点。
解决方案文件:
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;
}
}
逐行工作,不遗漏任何一行