Ответ 1
Вы можете установить поток и текстовый редактор непосредственно из С#:
engine.Runtime.IO.SetOutput(stream, txtWriter);
engine.Runtime.IO.SetErrorOutput(stream, txtWriter);
Чтобы перенаправить вывод, например, вы можете переопределить класс TextWriter с новой записью в текстовом поле.
например.
в моем приложении я переопределил класс StreamWriter, который увеличивает события, когда что-то написано в потоке (здесь только часть кода):
public class MyEvtArgs<T> : EventArgs
{
public T Value
{
get;
private set;
}
public MyEvtArgs(T value)
{
this.Value = value;
}
}
public class EventRaisingStreamWriter : StreamWriter
{
#region Event
public event EventHandler<MyEvtArgs<string>> StringWritten;
#endregion
#region CTOR
public EventRaisingStreamWriter(Stream s):base(s)
{ }
#endregion
#region Private Methods
private void LaunchEvent(string txtWritten)
{
if (StringWritten != null)
{
StringWritten(this, new MyEvtArgs<string>(txtWritten));
}
}
#endregion
#region Overrides
public override void Write(string value)
{
base.Write(value);
LaunchEvent(value);
}
public override void Write(bool value)
{
base.Write(value);
LaunchEvent(value.ToString());
}
// here override all writing methods...
#endregion
}
Затем в вашем приложении вы должны просто сделать что-то вроде:
MemoryStream ms = new MemoryStream();
outputWr = new EventRaisingStreamWriter(ms);
outputWr.StringWritten += new EventHandler<MyEvtArgs<string>>(sWr_StringWritten);
engine.Runtime.IO.SetOutput(ms, errorWr);
void sWr_StringWritten(object sender, MyEvtArgs<string> e)
{
textBox1.Text += s.Value;
}