我試圖通過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如果我的答案幫助了你,請考慮選擇它作爲正確的答案。 –