プロセス(lame.exe)を実行して、WAVファイルをMP3にエンコードします。
プロセスのSTDOUTとSTDERRを処理して、進捗情報を表示したい。
スレッドを使用する必要がありますか?頭が回らない。
いくつかの簡単なサンプルコードをいただければ幸いです。
ありがとう
クラスを介して実行している場合Process
は、ストリームをリダイレクトして処理できるようにすることができます。stdoutまたはstderrから同期的または非同期的に読み取ることができます。true
リダイレクトを有効にするには、リダイレクトするストリーム(たとえば)に適切なリダイレクトプロパティをに設定しRedirectStandardOutput
、に設定UseShellExecute
しfalse
ます。次に、プロセスを開始してストリームから読み取ることができます。入力リダイレクトstdinをフィードすることもできます。
たとえば、プロセスがstdoutに同期的に書き込むものはすべて処理して印刷します
var proc = new Process()
{
StartInfo = new ProcessStartInfo(@"SomeProcess.exe")
{
RedirectStandardOutput = true,
UseShellExecute = false,
}
};
if (!proc.Start())
{
// handle error
}
var stdout = proc.StandardOutput;
string line;
while ((line = stdout.ReadLine()) != null)
{
// process and print
Process(line);
Console.WriteLine(line);
}
このためのMSDNの例があります...これは簡略化されたバージョンです:
var StdOut = "";
var StdErr = "";
var stdout = new StringBuilder();
var stderr = new StringBuilder();
var psi = new ProcessStartInfo();
psi.FileName = @"something.exe";
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
var proc = new Process();
proc.StartInfo = psi;
proc.OutputDataReceived += (sender, e) => { stdout.AppendLine(e.Data); };
proc.ErrorDataReceived += (sender, e) => { stderr.AppendLine(e.Data); };
proc.Start();
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
proc.WaitForExit(10000); // per sachin-joseph's comment
StdOut = stdout.ToString();
StdErr = stderr.ToString();
Process.OutputDataReceived
イベントでSTDOUTを聞くことができるはずです。MSDNページに例があります。Process.ErrorDataReceived
STDERRのイベントもあります。