Windows フォーム アプリケーションを作成するとき、外部コンソール プログラムを実行し、出力をプログラム内のテキスト ボックスにリダイレクトしたい場合があります。これを実現するには、次の手順に従います:
まず、実行する外部プログラムを表す Process
オブジェクトを作成します。
<code class="language-csharp">var p = new Process(); var path = @"C:\ConsoleApp.exe"; p.StartInfo.FileName = path; p.StartInfo.UseShellExecute = false;</code>
標準出力をコンソールからテキスト ボックスにリダイレクトするには、OutputDataReceived
イベント ハンドラーを設定します。
<code class="language-csharp">p.OutputDataReceived += p_OutputDataReceived;</code>
OutputDataReceived
イベント ハンドラーでは、コンソール プログラムからの出力を処理および操作できます。コード例では、これは出力をコンソールに書き込むことによって行われます。 Console.WriteLine
をテキスト ボックスを更新するコードに置き換えます。
<code class="language-csharp">static void p_OutputDataReceived(object sender, DataReceivedEventArgs e) { Console.WriteLine(">>> {0}", e.Data); // 将此行替换为更新文本框的代码 }</code>
標準出力とエラー出力の両方を処理する別の方法:
<code class="language-csharp">void RunWithRedirect(string cmdPath) { var proc = new Process(); proc.StartInfo.FileName = cmdPath; // 设置输出重定向 proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardError = true; proc.EnableRaisingEvents = true; proc.StartInfo.CreateNoWindow = true; // 请参见下面的输出处理程序 proc.ErrorDataReceived += proc_DataReceived; proc.OutputDataReceived += proc_DataReceived; proc.Start(); proc.BeginErrorReadLine(); proc.BeginOutputReadLine(); proc.WaitForExit(); } void proc_DataReceived(object sender, DataReceivedEventArgs e) { // 输出将在字符串 e.Data 中 // 将此行替换为更新文本框的代码 }</code>
// 将此行替换为更新文本框的代码
コメント セクションは、特定のテキスト ボックス コントロール名と更新方法に基づいて変更する必要があることに注意してください。たとえば、テキスト ボックス名が textBox1
の場合、次のコードを使用してテキスト ボックスの内容を更新できます:
<code class="language-csharp">textBox1.AppendText(e.Data + Environment.NewLine);</code>
これにより、受信したデータがテキスト ボックスに追加され、データの各行の後に改行文字が追加されます。 RunWithRedirect
を呼び出すか、OutputDataReceived
イベント ハンドラーを設定する前に、テキスト ボックスが作成され、フォームに追加されていることを必ず確認してください。
以上がコンソール出力を Windows フォーム アプリケーションの TextBox にリダイレクトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。