我正在尝试通过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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句