我正在尝试通过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();
}
问题是:如何防止它卡住?
编辑:一旦命令完成,表单就会再次响应(只是为了清楚)。
答案 0 :(得分:4)
你应该考虑在后台进程中启动cmd -
我认为你这样做的方式,主线程将无法响应,直到cmd发出回报..? 所以它阻止了主线程。
背景工作者可能是一种选择。