我有一个正在进行视频处理的应用。
我需要在处理之前分析媒体。
ffmpeg实用程序ffprobe.exe
提供了我需要的所有信息。
但是我使用的代码不会返回在cmd
窗口中运行命令时显示的文本:
public static string RunConsoleCommand(string command, string args)
{
var consoleOut = "";
using (var process = new Process())
{
process.StartInfo = new ProcessStartInfo
{
FileName = command,
Arguments = args,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true
};
process.Start();
consoleOut = process.StandardOutput.ReadToEnd();
process.WaitForExit();
return consoleOut;
}
}
任何想法?
答案 0 :(得分:0)
Process类有一些事件可以处理:
public static string RunConsoleCommand(string command, string args)
{
var consoleOut = "";
using (var process = new Process())
{
process.StartInfo = new ProcessStartInfo
{
FileName = command,
Arguments = args,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true
};
// Register for event and do whatever
process.OutputDataReceived += new DataReceivedEventHandler((snd, e) => { consoleOut += e.Data; });
process.Start();
process.WaitForExit();
return consoleOut;
}
}
你也有ErrorDataReceived,它的工作方式相同。
我在某些项目中使用这些事件,它就像一个魅力。希望有所帮助。
编辑:修复了代码,您需要在开始此过程之前附加处理程序。