2009-06-22 18 views
8

jak mogę zabić proces po powiedzieć 2 lub trzy minuty spojrzeć na poniższy kod:Process Zabij po pewnym czasie + 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); 
     } 



    } 
} 

więc chcę, że IE okno zamknięte po 2 minutach

+1

p1.WaitForExit (60000); // DateTime endTime2; p1.CloseMainWindow(); // endTime2 = p1.ExitTime; p1.Close(); – Developer

Odpowiedz

21

użytkowania Process.WaitForExit z limitem czasu wynoszącym dwie minuty, a następnie zadzwoń pod numer Process.Kill, jeśli WaitForExit zwrócił false.

(Zobacz także rozważyć powołanie CloseMainWindow zamiast Kill, w zależności od sytuacji. - lub przynajmniej spróbuj go najpierw, aby dać proces raczej szansa na prawidłowe wyłączanie)

+0

Dzięki za pomoc john użyłem metody okna closemain, która działa idealnie – Developer

0

Należy spróbować z usługą Windows zamiast z aplikacją konsoli. Usługi Windows mają cykliczny cykl życia, więc można to łatwo osiągnąć za pomocą kontrolera czasowego w usłudze Windows. Pozwól, aby zegar zaznaczył odstęp i wykonał pożądane działanie w określonych odstępach czasu.

Oczywiście można również sterować zegarem za pomocą aplikacji konsolowej.

3

Użyj System.Threading.Timer i dostarcz TimerCallback (który zawiera process.Kill) do wywołania z powrotem po 2 minutach. Zobacz the example here

//p1.Kill(startingTime.AddMinutes(2)); 
using (var timer = new Timer(delegate { p1.Kill(); }, null, 2000, Timeout.Infinite)) 
{ 
    Console.ReadLine(); // do whatever 
} 

Edycja: Jon rozwiązanie jest prostsze .. mniej typy .. no Utylizacja reqd.

Powiązane problemy