我试图通过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。