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 ....

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top