Как запустить процессы последовательно через код - PullRequest
2 голосов
/ 23 декабря 2011

Я должен запустить 3 процесса последовательно, один за другим. Второй процесс должен начаться после завершения первого процесса. Я работаю в C #. Я использовал метод Process.Start (), где он запускает все одновременно. Может ли кто-нибудь помочь мне.

Ответы [ 6 ]

7 голосов
/ 23 декабря 2011

Один из способов сделать это - добавить обработчик для события Exited первого процесса, а затем запустить второй процесс оттуда.

void StartProcessOne() {
    Process p = Process.Start("foo", "bar");
    p.Exited += (sender, e) => StartProcessTwo();
    p.Start();
}

void StartProcessTwo() {
    Process p = Process.Start("foo2", "bar2");
    p.Exited += (sender, e) => StartProcessThree();
    p.Start();
}

...

Вы также можете использовать метод WaitForExit(), который ожидает завершения процесса, прежде чем продолжить выполнение вашего кода. Однако обратите внимание, что это заставляет ваш собственный процесс останавливать выполнение, пока другой процесс не завершится. Это может оставить вас с неотзывчивым пользовательским интерфейсом и тому подобным, что может быть весьма нежелательно. ( source )

4 голосов
/ 23 декабря 2011
Process.Start("yourprogram.exe").WaitForExit();
Process.Start("yournextprogram.exe").WaitForExit();

и так далее ...

2 голосов
/ 23 декабря 2011

Вы можете сделать это, откликнувшись на событие Process.Exited.
Вы должны использовать этот подход вместо WaitForExit (), поскольку последний заблокирует вашу программу от реагирования на ввод пользователя и т. Д.1003 *

private int n = 0;

private void StartAProcess()
{
    Process process = new Process {
        StartInfo = {FileName = "cmd.exe", Arguments = "pause"}, 
        EnableRaisingEvents = true};
    process.Exited += process_Exited;
    process.Start();
    n++;
}

void process_Exited(object sender, EventArgs e)
{
    if (n < 3) StartAProcess();
}
1 голос
/ 23 декабря 2011

попробуйте этот код для каждого процесса

Process.WaitForExit()

http://msdn.microsoft.com/en-us/library/aa326953(v=VS.71).aspx

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

Если вы используете .NET 4, вы можете использовать API-интерфейс System.Threading.Tasks. Если ваш график становится более сложным, вы можете получить пробег от http://pdag.codeplex.com (должен признаться, это моя работа).

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

Вам нужно выполнить process.join (), чтобы дождаться завершения первого процесса, прежде чем отправлять следующий. Однако главный вопрос заключается в том, почему вы используете Process.Start () - для асинхронных задач - когда вы действительно хотите, чтобы они выполнялись синхронно? Просто звоню:

a();
b();
c();

будет запускать их один за другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...