为了运行命令提示符窗口,运行程序并读取输出,我已经实现了以下代码(从tutorial改编而来)。该代码是从ButtonClick事件处理程序中调用的,该处理程序嵌套在用户控件中。使用外部过程的UI冻结
我的印象是这会让我的程序的其余部分在外部进程运行的同时运行,因为这些方法是'异步'的。但是,这似乎并不是这种情况,因为我的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);
}
}
我已经在上面的代码中添加了,并删除了watiforexit()调用,但现在函数不显示消息框,任何想法? – 2012-04-12 16:12:02
你删除了'cmd.WaitForExit();'对吗? – SwDevMan81 2012-04-12 16:14:53
对不起,正在缓慢(然后编辑评论)。消息框现在完全不显示。你有什么想法,为什么? – 2012-04-12 16:18:05