执行cmd.exe时Windows窗体卡住了

时间:2014-01-28 08:14:41

标签: c# winforms command-line

我正在尝试通过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();
    }

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

编辑:一旦命令完成,表单就会再次响应(只是为了清楚)。

1 个答案:

答案 0 :(得分:4)

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

我认为你这样做的方式,主线程将无法响应,直到cmd发出回报..? 所以它阻止了主线程。

背景工作者可能是一种选择。