我试图通过cmd执行命令,但是当程序运行时,整个窗口被卡住并且没有响应。无法按下按钮,无法关闭表单等
这是执行代码:

    private void buttonStartTests_Click(object sender, EventArgs e)
    {
        String command = @"/c perl script.pl";
        ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe");
        cmdsi.Arguments = command;
        cmdsi.UseShellExecute = false;
        cmdsi.RedirectStandardOutput = true;
        cmdsi.RedirectStandardError = true;
        cmdsi.RedirectStandardInput = true;

        cmdsi.CreateNoWindow = true;

        Process cmd = Process.Start(cmdsi);

        String outstr;

        while ((outstr = cmd.StandardOutput.ReadLine()) != null)
        {
            this.richTextBoxTestOutput.Text += (outstr + "\n");
            this.richTextBoxTestOutput.Update();
        }

        //Wait for process to finish
        //cmd.WaitForExit();

        cmd.Close();
    }


问题是:如何防止其卡住?

编辑:命令完成后,表单将再次响应(只是为了使情况更清楚)。

最佳答案

您应该考虑在后台进程中启动cmd-

我认为您的方式,主线程将不响应,直到cmd提供回报..?
因此它阻塞了主线程。

可以选择Backgroundworker。

10-04 16:36