Убить процесс через определенное время + C #
Вопрос
как мне убить процесс, скажем, через две или три минуты посмотрите на следующий код:
class Program
{
static void Main(string[] args)
{
try
{
//declare new process and name it p1
Process p1 = Process.Start("iexplore", "http://www.google.com");
//get starting time of process
DateTime startingTime = p1.StartTime;
Console.WriteLine(startingTime);
//add a minute to startingTime
DateTime endTime = startingTime.AddMinutes(1);
//I don't know how to kill process after certain time
//code below don't work, How Do I kill this process after a minute or 2
p1.Kill(startingTime.AddMinutes(2));
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("Problem with Process:{0}", ex.Message);
}
}
}
поэтому я хочу, чтобы окно IE было закрыто через 2 минуты
Решение
Используйте Process.WaitForExit
с время ожидания составляет две минуты, а затем вызовите процесс .Kill
, если WaitForExit
вернул false
.
(Вы можете также подумать о том, чтобы позвонить CloseMainWindow
вместо Kill
, в зависимости от вашей ситуации - или, по крайней мере, попробуйте сначала, чтобы дать процессу больше шансов сделать упорядоченное завершение работы.)
Другие советы
Используйте System.Threading.Timer и предоставьте TimerCallback (который содержит ваш process.Kill), который будет вызываться через 2 минуты. См. пример здесь
//p1.Kill(startingTime.AddMinutes(2));
using (var timer = new Timer(delegate { p1.Kill(); }, null, 2000, Timeout.Infinite))
{
Console.ReadLine(); // do whatever
}
Редактировать: решение Джона проще ... меньше типов .. нет необходимости утилизации.
Попробуйте использовать Windows Service вместо консольного приложения. Службы Windows имеют итеративный жизненный цикл, поэтому этого легко достичь, используя элемент управления таймером в службе Windows. Дайте таймеру помечать интервал и выполняйте желаемые действия через определенные промежутки времени.
Конечно, вы можете использовать управление таймером и с консольным приложением.