我试图通过cmd执行一个命令,但是当程序运行时,整个窗口卡住了而且没有响应。不能按按钮时,不能关闭窗体等 这是执行代码:Windows Form在执行cmd.exe时卡住了
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();
}
的问题是:我怎么防止它被卡住?
编辑:一旦命令完成(只是为了弄清楚事情),表单会变得响应。
您可以像使用'await'和'async' –
那样使用.net 4.5功能,它不是异步的,所以它按顺序执行所有代码,并且应用程序的其余部分等待它。当此事件处理程序被触发时,窗口变得无响应,并且永远不会返回到响应状态,因为此事件中的任何事情都不会完成。您可以尝试设置事件的中断点,然后进入代码以查看挂起的位置。 – 2014-01-28 08:26:29
@ user116969如果我的答案帮助了你,请考虑选择它作为正确的答案。 –