Войти

Показать полную графическую версию : Ожидание завершения процесса


Efsey
19-11-2010, 10:41
Подскажите, каким образом можно заставить программу ждать завершения процесса (нескольких и с одинаковыми именами)?

Efsey
19-11-2010, 10:59
Пока сделал так 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
Efsey, посмотрите WaitForSingleObject либо WaitForMultipleObject, может быть подойдут!

Efsey
19-11-2010, 14:54
Нашел решение попроще:
public void tmc()
{
Process[] chr;
chr = Process.GetProcessesByName("proga");
chr[0].WaitForExit();
}

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

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

LilLoco
23-11-2010, 16:07
Efsey, а программы запускаются из вашего приложения?

Efsey
23-11-2010, 18:03
Тут такая схема - одна программа запускается вручную и выключать её нельзя, остальные запускаются через мою прогу этим:
System.Diagnostics.Process.Start(PathCompiler, ArgCompiler);
Написано в C#.

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

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

LilLoco
23-11-2010, 18:31
Ну я как бы с этим тоже не сталкивался, но можно попробовать разобраться с этим! Могу предложить пока что чисто теоретически, т.к. в данный момент нету под рукой 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
Мдя... Это нада осмыслить. =)

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




© OSzone.net 2001-2012