C#System.Diagnostics.Process:如果超过10秒,如何退出进程?

时间:2010-09-14 12:03:24

标签: c# process timing

我尝试了以下代码:

p = StartProcess("some_process.exe");
DateTime startTime = DateTime.Now;
p.Start();
while (!p.HasExited)
{
    executeTime = (DateTime.Now - startTime).Milliseconds;

    if (executeTime > 10000) // 10 seconds
    {
       Console.Write("Test \"" + inputTest + "\" failed: takes more than 10 seconds");
       break;
    }
}

但它不起作用。

有可能吗?

3 个答案:

答案 0 :(得分:12)

您可以使用WaitForExit方法:

if (!p.WaitForExit((int)TimeSpan.FromSeconds(10).TotalMilliseconds))
{
    // timeout exceeded while waiting for the process to exit
}

答案 1 :(得分:2)

WaitForExit答案更好,因为它会阻止,但代码不起作用的原因是因为您需要TimeSpan.TotalMilliseconds而不是TimeSpan.MillisecondsMilliseconds为您提供[-999,999]范围内的内容:http://msdn.microsoft.com/en-us/library/system.timespan.milliseconds.aspx

答案 2 :(得分:1)

在流程变量上调用Kill方法(在您的示例中为p),这将停止该过程。

注意:示例中的循环非常占用CPU。您应该使用WaitForExit调用等待10秒(如Darin Dimitrov建议的那样)。