Как дождаться завершения консольного процесса ДО запуска другого консольного процесса в wpf-приложениях? - PullRequest
4 голосов
/ 02 ноября 2010

У меня есть 2 внешних процесса для запуска (2 консоли exe), которые обеспечивают вывод на консоль.Я запускаю эти приложения в приложении wpf.Я фиксирую вывод консоли и использую его как ввод.

вот как я делаю 1. запустить первый процесс.захватить вывод консоли.2. сделать некоторую работу, используя первый вывод процесса.3. Запустите второй процесс после того, как у меня будет вывод «do некоторая работа».

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

public MainWindow()
{
    InitializeComponent();
    ExtProcess1();
    ExtProcess2();  //this is executed before ExtProcess1 OutputDataReceived is completely captured
    Instance = this;
}

public static void ExtProcess1()
{
    Process process = new Process();
    process.EnableRaisingEvents = true;
    process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
    process.Exited += new EventHandler(process_Exited);
    process.StartInfo.FileName = "test.exe";
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.CreateNoWindow = true;
    process.Start();
    process.PriorityClass = ProcessPriorityClass.RealTime;
    process.BeginOutputReadLine();
    process.WaitForExit();
}

static void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    if (MainWindow.Instance.lbLog.Dispatcher.Thread == Thread.CurrentThread)
    {
        String s = (String)e.Data;
        MainWindow.Instance.lbLog.Items.Add(s);
    }
    else
    {
        MainWindow.Instance.lbLog.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send,
            new EventHandler<DataReceivedEventArgs>(corePingPid_OutputDataReceived), sender, new object[] { e });
    }
}

Как заставить приложение wpf ждать первого процесса ДО запуска второго процесса?

1 Ответ

3 голосов
/ 02 ноября 2010

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

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