Начать процесс последовательно и параллельно - PullRequest
0 голосов
/ 05 декабря 2011

У меня проблема здесь .....

У меня есть список ProcessStartInfo как List<ProcessStartInfo>

Я хочу запустить процессы в Series, т.е.

если я запускаю первый процесс, тогда второй процесс в списке должен начинаться только тогда, когда первый процесс (выход или прерывание) ...

Я стараюсь, как .....

    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;
            }
        }
    }

Я выполняю startSeriesExecution, используя пользовательский класс для многопоточности, все процессы выполняются одновременно ....

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // This function starts the Execution in different thread
        Start.Work(startSeriesExecution).OnComplete(onSeriesExecutionComplete).Run();
    }

Еще одна вещь, которую я наблюдал ...

если 1 процесс уже запущен ... допустим, IE уже запущен, и теперь я выполнил startSeriesExecution(), и при этом запускается уже запущенный процесс (IE) ... тогда выполняется весь цикл for ... т.е. все процессы в списке выполняются ...

Понятия не имею, как продолжить ....

1 Ответ

0 голосов
/ 05 декабря 2011

Этот код выглядит так, как будто он будет работать.WaitForExit будет приостанавливать этот поток до тех пор, пока он не завершится.

Также, если эти процессы выводят большое количество информации, вам необходимо добавить

process.ErrorDataReceived += new DataReceivedEventHandler(process_ErrorDataReceived);
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);

Что является хорошей идеей, в противном случае процессможет зависать до тех пор, пока поля вывода и ошибки не будут очищены, что может никогда не произойти.

Добавление событий в процесс будет сохранять их вывод и, следовательно, не засорять его, так сказать.

ОБНОВЛЕНИЕ:

Если вы хотите проверить, запущен ли уже процесс, вы можете сделать это следующим образом: stackoverflow.com / a / 51149/540339

Тогда вам придетсязацикливайтесь и ждите, используя Thread.Sleep (xxxx), пока этот процесс не закроется.

...