.NET プロセス出力キャプチャ: 総合ガイド
.NET プログラムで外部コマンドまたはアプリケーションを実行するには、その出力を処理してキャプチャする必要があります。このガイドでは、.NET でサブプロセスを効率的に起動し、その標準出力 (STDOUT) をキャプチャするための手順と考慮事項について詳しく説明します。
プロセス作成プロセスを理解する
子プロセスを開始するには、Process オブジェクトを作成し、その StartInfo プロパティを設定します。 CreateNoWindow フラグを使用すると、コンソール ウィンドウなしでプロセスが実行されます。一方、RedirectStandardOutput を使用すると、StandardOutput プロパティを介して出力をキャプチャできます。
出力データの処理
子プロセスが出力を生成すると、p.OutputDataReceived イベントが呼び出されます。この出力を受信して処理するには、DataReceivedEventHandler デリゲートを作成し、それをイベントにアタッチします。このハンドラーでは、StreamReader を使用して出力を読み取り、文字列または適切なデータ構造に保存します。
イベント処理の最適化
非同期イベント処理により、子プロセスから出力をキャプチャする場合でもアプリケーションの応答性が維持されます。 process.BeginOutputReadLine() を使用すると、出力データを処理する専用のスレッドを開始して、メイン スレッドを解放して他のタスクを実行できます。
出力を直接読み取る
イベント処理はリアルタイム監視に非常に便利ですが、より簡単な方法は、p.StandardOutput.ReadToEnd() を使用して出力を直接読み取ることです。このメソッドは、すべての出力が受信されるまでブロックされますが、これにより、すべての出力を一度にキャプチャする簡単な方法が提供されます。
サンプルコード
MSBuild プロセスの出力をキャプチャするサンプル コード ブロックは次のとおりです。
<code class="language-csharp">Process process = new Process(); process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.OutputDataReceived += (sender, args) => { if (!args.Data.StartsWith("MSBUILD") && !args.Data.StartsWith("Info")) { Console.WriteLine($"已接收输出: {args.Data}"); } }; process.Start(); process.BeginOutputReadLine();</code>
以上が.NETで外部プロセス出力を効率的にキャプチャするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。