我正在使用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);
}
(我知道只是添加输入和输出一次不会削减我想做的事情,但我一步一步。)
我尝试过这样的例子:Redirect console input and output to a textbox。
我添加了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上找到了这个,但我不确定除了可能在另一个控制台窗口中运行它之外还能理解什么?
我发现了很多有关传输控制台输出的信息(这有助于我解决这个问题),但输入信息却没有那么多。一些指向正确方向的人将会受到赞赏,无论是使用文本框输入还是使用其他方式嵌入已编译的程序。谢谢。