使用命令行应用程序对视频进行编码。该应用返回一行说明:
%完成:34%
这是在媒体编码时更新的。有没有办法使用流程类来继续检查标准输出并将其传递回主执行脚本?我有一个类启动进程,然后将标准输出写入stringbuilder但我想知道如何继续检查它。这是代码......
public static Dictionary<string, string> StartProcess(string exePathArg, string argumentsArg, int timeToWaitForProcessToExit)
{
//the dictionary with the
Dictionary<string, string> retDirects = new Dictionary<string, string>();
using (Process p = new Process())
{
p.StartInfo.FileName = exePathArg;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.Arguments = argumentsArg;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
try
{
p.Start();
p.WaitForExit(timeToWaitForProcessToExit);
int exitCode;
try
{
exitCode = p.ExitCode;
StreamReader standardOutput = p.StandardOutput;
StreamReader standardError = p.StandardError;
retDirects.Add("StandardOutput", standardOutput.ReadToEnd());
retDirects.Add("StandardError", standardError.ReadToEnd());
}
catch { }
}
catch { }
finally
{
try
{
p.Kill();
p.CloseMainWindow();
}
catch { }
}
}
return retDirects;
}
答案 0 :(得分:0)
您可以使用Process.BeginOutputReadLine
启动Process.OutputDataRecieved
事件的触发。 UseShellExecute
必须为false
且Redirect<StreamOfChoice>Output
必须为true,如示例代码中所示。
MSDN上有一个例子,我不会在这里反刍。我注意到有些程序使用不同的流来实现我认为的意外目的,因此对来自不同流的事件使用相同的处理程序可能是合适的。
答案 1 :(得分:0)
不使用“ReadToEnd”,而是在循环中使用几个字节(甚至一个字节)的“Read”。读取将阻塞,直到它读取您指定的字节数。找到正确的字节数,您应该能够从标准输出中读取字符串。