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 に答える