0

我有一个正在做一些视频处理的应用程序。

我需要在处理媒体之前对其进行分析。

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;
    }
}

有任何想法吗?

4

1 回答 1

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,它的工作方式相同。

我在一些项目中使用这些事件,它就像一个魅力。希望有帮助。

编辑:修复了代码,您需要在开始流程之前附加处理程序。

于 2012-11-27T15:47:50.390 回答