Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Ожидание завершения процесса (http://forum.oszone.net/showthread.php?t=191638)

Efsey 19-11-2010 10:41 1546237

Ожидание завершения процесса
 
Подскажите, каким образом можно заставить программу ждать завершения процесса (нескольких и с одинаковыми именами)?

Efsey 19-11-2010 10:59 1546253

Пока сделал так
Код:

public void tmc()
        {
            Process[] psl = System.Diagnostics.Process.GetProcessesByName("proga");
                        foreach (Process pl in psl)
                        {
                            Thread.Sleep(10000);
                            this.tmc();
                        }
        }

но это явно какая то ересь...

LilLoco 19-11-2010 12:51 1546330

Efsey, посмотрите WaitForSingleObject либо WaitForMultipleObject, может быть подойдут!

Efsey 19-11-2010 14:54 1546446

Нашел решение попроще:
Код:

public void tmc()
{
Process[] chr;
            chr = Process.GetProcessesByName("proga");
            chr[0].WaitForExit();
}

может кому пригодится

Efsey 23-11-2010 15:32 1549530

Не ругайте, но у меня новый вопрос. Как дождаться завершения только 2-х последних запущенных программ, если в памяти их штук 5-6?

LilLoco 23-11-2010 16:07 1549569

Efsey, а программы запускаются из вашего приложения?

Efsey 23-11-2010 18:03 1549689

Тут такая схема - одна программа запускается вручную и выключать её нельзя, остальные запускаются через мою прогу этим:
Код:

System.Diagnostics.Process.Start(PathCompiler, ArgCompiler);
Написано в C#.

LilLoco 23-11-2010 18:12 1549698

Ну я так предполагаю, это можно реализовать через : при запуске процесса запоминать хэндл, ну а по нему уже завершать этот процесс!Или такой вариант Вам не подходит?

Efsey 23-11-2010 18:18 1549704

Эээ, как бы сказать... Я этого пока не умею=(
Покажите, пожалуйста, пример)

LilLoco 23-11-2010 18:31 1549714

Ну я как бы с этим тоже не сталкивался, но можно попробовать разобраться с этим! Могу предложить пока что чисто теоретически, т.к. в данный момент нету под рукой C#.
Допустим нужно запустить программу Программа1.exe.
Код:

Process proc = new Process();
proc.StartInfo.FileName = "Программа1.ехе";
proc.Start();
IntPtr hProc = Proc.Handle; //по идее в hProc должен записаться Хэндл, либо я совсем не прав, поправьте если что!

Не забываем про
Код:

using System.Diagnostics
.

Если процессов много запускается, то делаем все для каждого!
Потом, если все таки воспользоваться
Цитата:

WaitForMultipleObject »
, то из всех хэндлов создать массив,либо создавать его сразу, и запускать саму функцию!

Efsey 23-11-2010 18:43 1549725

Мдя... Это нада осмыслить. =)

Efsey 24-11-2010 19:16 1550732

Блин, это слишком сложно. Сделал так - копировал запускаемую программу с именем proga2. Теперь вручную запускаю proga, а программка запускает и отслеживает proga2. Наверно у меня в роду были индусы


Время: 01:47.

Время: 01:47.
© OSzone.net 2001-