我已经实现了以下代码(改编自教程),以便运行命令提示符窗口、运行程序并读取输出。该代码是从嵌套在用户控件中的 ButtonClick 事件处理程序调用的。
我的印象是,由于这些方法是“异步的”,这将允许我的程序的其余部分在外部进程运行时运行。但是,情况似乎并非如此,因为我的 UI 将在操作运行时冻结。我应该补充一点,当 cmd 进程结束时收到的输出是正确的。
很抱歉转储大量这样的代码,只是不知道此时还能做什么!
任何帮助将不胜感激。
public static void runExternalProcess()
{
StringBuilder output = new StringBuilder();
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.OutputDataReceived += new DataReceivedEventHandler(outputEventHandler);
cmd.StartInfo.RedirectStandardInput = true;
cmd.Start();
cmd.BeginOutputReadLine();
StreamWriter sortStreamWriter = cmd.StandardInput;
StreamWriter sw = cmd.StandardInput;
if (sw.BaseStream.CanWrite)
{
sw.WriteLine("ping www.google.com");
}
sw.Close();
cmd.WaitForExit();
MessageBox.Show(output.ToString());
cmd.Close();
}
private static void outputEventHandler(object sendingProcess, DataReceivedEventArgs e)
{
if (!String.IsNullOrEmpty(e.Data))
{
output.Append(e.Data + Environment.NewLine);
}
}