Termina processo dopo un certo tempo + C #
Domanda
come posso uccidere un processo dopo due o tre minuti, guarda il seguente codice:
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);
}
}
}
quindi voglio che la finestra di IE si chiuda dopo 2 minuti
Soluzione
Usa Process.WaitForExit
con un timeout di due minuti, quindi chiama Process .Kill
se WaitForExit
restituisce false
.
(Potresti anche considerare di chiamare CloseMainWindow
invece di Kill
, a seconda della situazione - o almeno provalo prima, per dare al processo più possibilità di eseguire un arresto ordinato.)
Altri suggerimenti
Usa un System.Threading.Timer e fornisci un TimerCallback (che contiene il tuo process.Kill) per essere richiamato dopo 2 minuti. Vedi l'esempio qui
//p1.Kill(startingTime.AddMinutes(2));
using (var timer = new Timer(delegate { p1.Kill(); }, null, 2000, Timeout.Infinite))
{
Console.ReadLine(); // do whatever
}
Modifica: la soluzione di Jon è più semplice .. meno tipi .. no smaltimento reqd.
Dovresti provare con il servizio Windows invece che con un'applicazione console. I servizi di Windows hanno un ciclo di vita iterativo, quindi questo può essere facilmente ottenuto usando un controllo timer nel servizio di Windows. Lascia che il timer ticchetti ad un intervallo ed esegua l'azione desiderata su determinati intervalli di tempo.
Ovviamente puoi usare il controllo timer anche con un'applicazione console.