C# Windows Forms TextBox でのコンソール出力のキャプチャ
多くの C# Windows フォーム アプリケーションは、外部コンソール アプリケーションを実行し、その出力をアプリケーションのユーザー インターフェイス内に表示する必要があります。 一般的な解決策は、このコンソール出力を TextBox にリダイレクトすることです。 このガイドではプロセスの概要を説明します。
主な手順には、出力リダイレクトによる外部プロセスの開始、出力イベントの処理、プロセスの監視が含まれます。
プロセスの開始と出力のリダイレクト:
まず、Process
オブジェクトを作成し、標準出力および標準エラー ストリームをリダイレクトするようにその StartInfo
プロパティを構成します。
<code class="language-csharp">Process p = new Process(); p.StartInfo.FileName = @"C:\ConsoleApp.exe"; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.EnableRaisingEvents = true; p.StartInfo.CreateNoWindow = true; // Prevents a separate console window p.Start();</code>
出力イベントの処理:
次に、OutputDataReceived
および ErrorDataReceived
イベントのイベント ハンドラーを登録します。 これらのイベントは、外部プロセスが標準出力または標準エラー ストリームにデータを送信するたびに発生します。 単一のイベント ハンドラーは両方に使用できます。
<code class="language-csharp">p.ErrorDataReceived += Proc_DataReceived; p.OutputDataReceived += Proc_DataReceived; p.BeginErrorReadLine(); p.BeginOutputReadLine();</code>
Proc_DataReceived
イベント ハンドラー (定義する必要があります) は出力データを受け取り、それに応じて TextBox を更新します。 例:
<code class="language-csharp">private void Proc_DataReceived(object sender, DataReceivedEventArgs e) { if (e.Data != null) { this.textBox1.Invoke((MethodInvoker)delegate { textBox1.AppendText(e.Data + Environment.NewLine); }); } }</code>
プロセスを実行して待機中:
最後に、プロセスを開始し、完了するまで待ちます:
<code class="language-csharp">p.Start(); p.WaitForExit();</code>
これらの手順に従うことで、外部コンソール アプリケーションの出力を C# Windows Forms アプリケーションにシームレスに統合し、リアルタイムのフィードバックを提供してユーザー エクスペリエンスを向上させることができます。 潜在的な例外を処理することを忘れずに、堅牢性を確保するためにエラー チェックを追加することを検討してください。
以上がC# でコンソール出力を TextBox にリダイレクトする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。