Я пытаюсь выполнить команду через 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();
}
Возникает вопрос: как предотвратить это застрять?
Редактировать: Форма становится отзывчивой снова после завершения команды (только для того, чтобы все было ясно).
Вы можете использовать функции .net 4.5, такие как 'await' и' async' –
как есть, это не асинхронно, поэтому он выполняет весь код в порядке, а остальная часть приложения ждет на нем. Окно становится неактивным, когда этот обработчик событий запускается и никогда не возвращается в реагирующее состояние, потому что все, что происходит в этом событии, никогда не завершается. Вы можете попробовать установить точку останова на событии, затем перейти в код, чтобы увидеть, где его повесили. –
@ user116969 если мой ответ помог вам, пожалуйста, подумайте над тем, чтобы использовать его как правильный ответ. –