Prozess abbrechen nach bestimmten Zeit + C #
Frage
Wie beende ich ein Verfahren nach sagen 2 oder 3 Minuten sehen Sie den folgenden Code:
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);
}
}
}
so mag ich, dass die IE-Fenster nach 2 Minuten geschlossen
Lösung
Verwenden Sie Process.WaitForExit
mit einem Timeout von zwei Minuten, und dann rufen Process.Kill
wenn WaitForExit
false
zurückgegeben.
(Das könnte dir auch CloseMainWindow
statt Kill
, je nach Ihrer Situation -. oder zumindest versuchen sie es zuerst, den Prozess eher eine Chance zu geben, ein ordnungsgemäßes Abschalten zu tun)
Andere Tipps
ein System.Threading.Timer verwenden und liefern eine Timercallback (die Ihre process.Kill enthält) zurück nach 2 Minuten aufgerufen werden. Siehe das Beispiel hier
//p1.Kill(startingTime.AddMinutes(2));
using (var timer = new Timer(delegate { p1.Kill(); }, null, 2000, Timeout.Infinite))
{
Console.ReadLine(); // do whatever
}
Edit:. Jons Lösung ist einfacher .. weniger Arten .. keine Entsorgung reqd
Sie sollten mit Windows Service versuchen, statt einer Konsolenanwendung. Windows-Dienste haben iterative Lifecycle so dass diese leicht eine Zeitsteuerung in Windows-Dienst erreicht werden kann. Lassen Sie den Timer-Tick in einem Intervall und führen gewünschte Aktion auf bestimmten Zeitintervallen.
Natürlich können Sie Timer-Steuerung mit einer Konsolenanwendung verwenden.