我尝试了以下代码:
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;
}
}
但它不起作用。
有可能吗?
答案 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.Milliseconds
。 Milliseconds
为您提供[-999,999]范围内的内容:http://msdn.microsoft.com/en-us/library/system.timespan.milliseconds.aspx
答案 2 :(得分:1)
在流程变量上调用Kill
方法(在您的示例中为p),这将停止该过程。
注意:示例中的循环非常占用CPU。您应该使用WaitForExit
调用等待10秒(如Darin Dimitrov建议的那样)。