// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
namespace VisualPascalABC.Utils
{
///
/// A threaded or
/// reader.
///
public class OutputReader
{
StreamReader reader;
string output = String.Empty;
Thread thread;
public event LineReceivedEventHandler LineReceived;
public OutputReader(StreamReader reader)
{
this.reader = reader;
}
///
/// Starts reading the output stream.
///
public void Start()
{
thread = new Thread(new ThreadStart(ReadOutput));
thread.Start();
}
///
/// Gets the text output read from the reader.
///
public string Output {
get {
return output;
}
}
///
/// Waits for the reader to finish.
///
public void WaitForFinish()
{
if (thread != null) {
thread.Join();
}
}
///
/// Raises the event.
///
///
protected void OnLineReceived(string line)
{
if (LineReceived != null) {
LineReceived(this, new LineReceivedEventArgs(line));
}
}
///
/// Reads the output stream on a different thread.
///
void ReadOutput()
{
output = String.Empty;
StringBuilder outputBuilder = new StringBuilder();
bool endOfStream = false;
while(!endOfStream)
{
//reader.
string line = reader.ReadLine();
if (line != null) {
outputBuilder.Append(line);
outputBuilder.Append(Environment.NewLine);
OnLineReceived(line);
} else {
endOfStream = true;
}
}
output = outputBuilder.ToString();
}
}
}