C#异步StandardInput重定向

时间:2016-01-17 20:36:54

标签: c# io-redirection

我正在创建WinForm应用程序,它启动一个重定向进程。我正在使用异步方法:

proc = new Process();

proc.StartInfo.FileName = commandLocation + procesName;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.Arguments = arguments;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.WorkingDirectory = workingDirectory;
proc.StartInfo.CreateNoWindow = true;

proc.OutputDataReceived += (sender, args) => AppendLine(args.Data);
proc.ErrorDataReceived += (sender, args) => AppendLine(args.Data);

proc.Start();
proc.StandardInput.WriteLine(inputText);
proc.BeginOutputReadLine();

while (!proc.HasExited) //Instead of WaitForExit
{
    Thread.Sleep(100); //Because of CPU usage
    Application.DoEvents();
}

这是用于显示输出到richtextbox的AppendLine方法:

private void AppendLine(string line)
{
    if (richTextBoxOutput.InvokeRequired)
    {
        Action act = () =>
        {
            this.richTextBoxOutput.AppendText(line + Environment.NewLine);
        };

        this.BeginInvoke(act);
    }
    else
    {
        richTextBoxOutput.AppendText(line + Environment.NewLine);
    }
}

一切都运作良好。但是当我运行需要输入的控制台应用程序时(例如Console.ReadLine()),我的应用程序崩溃link(没有响应)。如何在整个运行过程中将输入发送到重定向的控制台应用程序?

0 个答案:

没有答案