0

ボタンが押された後にプロセスを実行し、その標準出力を読み取るために、Windowsフォームを使用して同じアプリを作成しました。button1_Click() でメソッド「test()」を呼び出すと、プログラムがブロックされます。しかし、「Form1」コンストラクターで「test()」を呼び出すと、すべてが期待どおりに機能します。問題はどこですか?

using System;
using System.Windows.Forms;

namespace DISMassistant
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            process1.StartInfo.RedirectStandardError = true;
            process1.StartInfo.RedirectStandardOutput = true;
            process1.StartInfo.UseShellExecute = false;
            process1.StartInfo.FileName = "cmd.exe";
            process1.StartInfo.Arguments = "/?";

        }

        public void button1_Click(object sender, EventArgs e)
        {

        }

        public void test()
        {
            process1.Start();

            process1.BeginOutputReadLine();
            process1.BeginErrorReadLine();

            process1.WaitForExit();
            process1.CancelOutputRead();
            process1.CancelErrorRead();
            process1.Close();
        }

        private void process1_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
        {
            if (string.IsNullOrEmpty(e.Data)) return;

            richTextBox1.Text += e.Data + "\n";
        }

        private void process1_ErrorDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
        {
            if (string.IsNullOrEmpty(e.Data)) return;

            richTextBox1.Text += e.Data + "\n";
        }
    }
}
4

1 に答える 1