最近WindowsFormApplicationからWPFに移行したので、その練習がてらにコマンドラインでの操作も同時にできるScheme用テキストエディタを作っているのですが、その際にコマンドラインの内容をTextBoxに出力し、TextBoxでの入力内容をコマンドラインに入力する必要があったので、子プロセスとしてgoshを開きその入出力をリダイレクトしました。
 しかし、TextBoxからの入力はgoshに送れるのですがgoshからの標準出力が受け取れません。一方で標準エラーは受け取れるのです。以下がソースコードです。

namespace Schemer
{
    /// <summary>
    /// Terminal.xaml の相互作用ロジック
    /// </summary>
    public partial class Terminal : TextBox
    {
        public delegate void MyEventHandler(object sender, DataReceivedEventArgs e);
        public event MyEventHandler MyEvent = null;

        Process Scheme = null;
        readonly string Interpreter = "gosh";
        int CurrentIndex = 5;

        public Terminal()
        {
            InitializeComponent();

            MyEvent = new MyEventHandler(Event_DataRecieved);

            Text = "gosh> ";

            Unloaded += Terminal_Unloaded;
            PreviewKeyDown += Terminal_PreviewKeyDown;
        }

        private void Terminal_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if(e.Key == Key.Enter)
            {
                string command = Text.Substring(CurrentIndex, Text.Length - CurrentIndex);
                Scheme.StandardInput.WriteLine(command);
                SelectionStart = Text.Length;
            }
        }

        private void Terminal_Unloaded(object sender, RoutedEventArgs e)
        {
            try
            {
                if (Scheme != null)
                {
                    Scheme.Kill();
                    Scheme.Close();
                    Scheme.Dispose();
                }
            }
            catch (InvalidOperationException exc)
            {

            }
        }

        void Event_DataRecieved(object sender, DataReceivedEventArgs e)
        {
            if (e.Data == null) return;
            Text += e.Data.Replace("gosh> ", "") + "\r\n" + "gosh> ";
            CurrentIndex = Text.Length - 1;
        }

        private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            Dispatcher.BeginInvoke(MyEvent, new object[2] { sender, e });
        }

        private void Scheme_ErrorDataReceived(object sender, DataReceivedEventArgs e)
        {
            Dispatcher.BeginInvoke(MyEvent, new object[2] { sender, e });
        }

        public void CreateProcess()
        {
            if (Scheme != null) return;
            Scheme = new Process();
            Scheme.StartInfo.FileName = Interpreter;
            Scheme.StartInfo.UseShellExecute = false;
            Scheme.StartInfo.RedirectStandardOutput = true;
            Scheme.StartInfo.RedirectStandardError = true;
            Scheme.StartInfo.RedirectStandardInput = true;
            Scheme.OutputDataReceived += Process_OutputDataReceived;
            Scheme.ErrorDataReceived += Scheme_ErrorDataReceived;

            Scheme.Start();
            Scheme.BeginOutputReadLine();
            Scheme.BeginErrorReadLine();
        }

        private void SendText(string text)
        {
            TextCompositionManager.StartComposition(new TextComposition(InputManager.Current, this, text));
        }

        private void SendKey(Key key)
        {
            PresentationSource presentationSource = PresentationSource.FromVisual(this);
            InputManager.Current.ProcessInput(new KeyEventArgs(Keyboard.PrimaryDevice, presentationSource, 100, key)
            {
                RoutedEvent = PreviewKeyDownEvent
            });
        }
    }
}

 因みにCreateProcessはWindowクラスのContentRenderedイベントが発火した際に呼び出しています。

実行環境はWindows 10、.NET Framework4.6.2です。
よろしくお願いします。