我正在创建一个应用程序,它从控制台接收输出,并使用Windows窗体通过列表框在更加用户友好的视图中显示它。我已经通过启动.jar文件的过程并使用以下代码来完成此操作:
public void DataReceived(object sender, DataReceivedEventArgs e)
{
// e.Data is the line which was written to standard output
if (e.Data != null)
{
// textBox1.Invoke((MethodInvoker)delegate { textBox1.Text = textBox1.Text + e.Data; });
Invoke(new MethodInvoker(delegate { listBox1.Items.Add(e.Data); }));
}
}
public void StartServer()
{
Process p = new Process();
p.StartInfo = new ProcessStartInfo("java", @"-Xmx1024M -jar " + UltimateMinecraftServerCreator.Properties.Settings.Default.jarname);
p.StartInfo.WorkingDirectory = UltimateMinecraftServerCreator.Properties.Settings.Default.jarlocator;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.OutputDataReceived += DataReceived;
p.Start();
p.BeginOutputReadLine();
}
我想知道在同一个表单上是否可以允许用户单击将向控制台发送命令的按钮,以及如果他们知道它们就可以键入命令。
谢谢!
答案 0 :(得分:1)
终于解决了!非常简单,我将Process p的声明移到了所有控件代码之上,因此它变得通用,并且能够使用p.StandardInput.WriteLine(“”);