由于这不能轻易解决,我如何实现 1 个线程逐行使用将Console.WriteLine()
字符串写入文件/缓冲区,另一个线程也逐行从同一文件/缓冲区读取这些字符串?我想我需要:
- 将控制台重定向到文件/缓冲区
- 读取文件/缓冲区线程保存,写入一行时必须由另一个线程读取
- 使其异步(不
ReadToEnd()
,它必须是实时的)
由于这不能轻易解决,我如何实现 1 个线程逐行使用将Console.WriteLine()
字符串写入文件/缓冲区,另一个线程也逐行从同一文件/缓冲区读取这些字符串?我想我需要:
ReadToEnd()
,它必须是实时的)不过,我想用缓冲区来做到这一点。
文件解决方案:
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;
}
}
逐行工作,不会错过任何一个。