3

我正在使用 C# 在 Visual Studio 2010 中的 WinForms 中开发一种类似 IDE 的程序。我已经让它与两个文本框、两个按钮和一个控制台窗口一起工作。第一个文本框用于编写 C# 代码,CodeDomProvider通过点击编译按钮进行编译。然后任何问题或成功消息都会出现在第二个文本框中。如果成功,您可以点击运行按钮使其在控制台窗口中运行。

我想做的不是让编译后的程序在单独的窗口中运行。

我已经设法弄清楚如何将输出重定向到第二个文本框,但我很难获得任何输入。我什至制作了第三个文本框,其中预先输入了文本以尝试输入某种输入,但表单最终冻结了。您可以在下面的代码中看到这一点。

private void runButton_Click(object sender, EventArgs e)
    {
        secondBox.Text = "";

        Process process = new Process();
        process.StartInfo.FileName = Program;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.RedirectStandardInput = true;
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.StartInfo.CreateNoWindow = true;
        process.Start();

        StreamReader reader = process.StandardOutput;
        StreamReader eReader = process.StandardError;
        StreamWriter writer = process.StandardInput;

        secondBox.Text += reader.ReadToEnd();
        secondBox.Text += eReader.ReadToEnd();
        writer.WriteLine(thirdBox.Text);
    }

(我知道只添加一次输入和输出并不能满足我想要做的事情,但我会一步一步来。)

我尝试这样做:将控制台输入和输出重定向到文本框。我取消了这些writer位,process.StandardInput.WriteLine(thirdBox.Text);改为使用,但这仍然不起作用。

当试图在编译程序中使用类似的东西时,也会产生错误的问题,System.Console.ReadKey()因为实际的进程窗口并没有真正创建(process.StartInfo.CreateNoWindow = true;)。我在这个主题上找到了这个:C#: can't ReadKey if my parent is a window application and it is redirecting my stdout,但除了可能在另一个控制台窗口中运行它之外,我不确定从中理解什么?

我发现了很多关于传输控制台输出的信息(这帮助我弄清楚了),但在输入方面却没有那么多。一些指向正确方向的人将不胜感激,无论是使用来自文本框的输入还是使用另一种嵌入编译程序的方式。谢谢你。

4

0 回答 0