Ich muss viele Befehlszeilenskripts ausführen. Sie sind derzeit in einer List
gespeichert. Ich möchte sie alle zur gleichen Zeit laufen lassen und mit dem nächsten Schritt fortfahren nur nachdem alle von ihnen abgeschlossen sind.Warten bis mehrere Befehlszeilenprozesse abgeschlossen sind?
Ich habe versucht den Ansatz, den ich unten zeigen, aber fand es fehlt, weil der letzte Befehl nicht unbedingt Ende letzten. In der Tat, ich fand, dass der letzte Befehl kann sogar die ersten abgeschlossen werden. Also, ich glaube, ich brauche etwas wie WaitForExit()
, aber die nicht zurück, bis alle Ausführungsprozesse abgeschlossen sind.
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
ich diese Lösung finden besser als jede angebotene Aufgabe parallel Ansatz, da es sich nicht unnötig verwenden/erstellen weitere Themen – Edin
Ist es notwendig, zu nennen process.Close()? http://msdn.microsoft.com/en-us/library/fb4aw7b8%28v=vs.110%29.aspx –
Wahrscheinlich nicht unbedingt notwendig, da 'Process' einen Finalizer von' Component' erbt, aber es ist eine gute Übung frühzeitig entsorgen. Es ist auch einfach genug, in diesem Beispiel zu tun (rufen Sie einfach 'Close()' nach 'WaitForExit()' in jeder Schleife Iteration). –