Mam potrzebę wykonywania wielu skryptów wiersza poleceń. Obecnie są przechowywane w postaci List
. Chcę uruchomić je wszystkie w tym samym czasie i przejść do następnego kroku po zakończeniu ich wszystkich.Poczekaj na zakończenie wielu procesów wiersza poleceń?
Próbowałem podejście, które przedstawię poniżej, ale znalazłem go brakuje, ponieważ ostatnie polecenie niekoniecznie koniec ostatni. W rzeczywistości okazało się, że ostatnie polecenie może być nawet najpierw do ukończenia. Tak więc uważam, że potrzebuję czegoś takiego jak WaitForExit()
, ale która nie powróci, dopóki nie zakończy się wykonywanie procesów.
for (int i = 0; i < commands.Count; i++)
{
string strCmdText = commands[i];
var process = System.Diagnostics.Process.Start("CMD.exe", strCmdText);
if (i == (commands.Count - 1))
{
process.WaitForExit();
}
}
//next course of action once all the above is done
Uważam to rozwiązanie lepsze niż oferowane zadań równoległym podejściu, ponieważ nie niepotrzebnie używać/tworzyć kolejne wątki – Edin
Czy trzeba zadzwonić process.Close()? http://msdn.microsoft.com/en-us/library/fb4aw7b8%28v=vs.110%29.aspx –
Prawdopodobnie nie jest to absolutnie konieczne, ponieważ "Proces" dziedziczy finalizator z "Komponentu", ale dobrą praktyką jest rozporządzać wcześniej. W tym przykładzie jest to również łatwe (po prostu wywołaj 'Close()' po 'WaitForExit()' w każdej iteracji pętli). –