Démarrer le processus dans la série et parallèle
-
28-10-2019 - |
Question
J'ai un problème ici .....
J'ai une liste de ProcessStartInfo comme List<ProcessStartInfo>
Je veux processus de démarrage dans Series
i.e.
si je démarre le premier processus puis deuxième processus dans la liste devrait commencer que lorsque le premier processus (Quitte ou Abandonne) ...
Je l'essaie comme .....
private void startSeriesExecution()
{
List<string> programpath = new List<string>();
programpath.Add(@"C:\Program Files\Internet Explorer\iexplore.exe");
programpath.Add(@"C:\Program Files\Microsoft Office\Office12\WINWORD.EXE");
foreach (var VARIABLE in programpath)
{
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = VARIABLE,
Arguments =
"www.google.com"
};
try
{
using (Process process=Process.Start(startInfo))
{
if (process.WaitForExit(Int32.MaxValue))
{
continue;
}
}
}
catch (Exception)
{
continue;
}
}
}
Je suis en cours d'exécution startSeriesExecution
en utilisant une classe personnalisée pour MultiThreading tout le processus d'exécuter en même temps ....
private void Button_Click(object sender, RoutedEventArgs e)
{
// This function starts the Execution in different thread
Start.Work(startSeriesExecution).OnComplete(onSeriesExecutionComplete).Run();
}
Aussi une chose que je ... observé
si 1 processus est déjà en cours ... permet de dire que IE est en cours d'exécution déjà et maintenant j'exécuté startSeriesExecution()
et dans ce démarrage d'un processus déjà en cours (IE) ... alors toute boucle est exécutée ... à savoir tous les processus dans la liste sont exécutés ...
ont maintenant aucune Have idée ho de procéder ....
La solution
qui ressemble de code comme cela fonctionnerait. Le WaitForExit se met en pause ce fil jusqu'à ce qu'il soit terminé.
En outre, si ces processus de sortie beaucoup d'informations, vous devrez ajouter
process.ErrorDataReceived += new DataReceivedEventHandler(process_ErrorDataReceived);
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
Ce qui est une bonne idée sans se soucier, sinon le processus pourrait bloquer jusqu'à ce que les champs de sortie et d'erreur sont effacés, ce qui pourrait ne jamais se produire.
Ajout d'événements au processus les garder en sortie et donc pas obstruer le haut pour ainsi dire.
Mise à jour:
Si vous voulez vérifier si un processus est déjà en cours d'exécution, vous pouvez le faire en ceci: stackoverflow.com/a/51149/540339
Ensuite, vous devrez attendre la boucle et l'utilisation Thread.Sleep (xxxx) jusqu'à ce que se ferme processus.