C # System.Diagnostics.Process: как выйти из процесса, если он занимает более, скажем, 10 секунд? - PullRequest
1 голос
/ 14 сентября 2010

Я попробовал следующий код:

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 ]

12 голосов
/ 14 сентября 2010

Вы можете использовать метод WaitForExit :

if (!p.WaitForExit((int)TimeSpan.FromSeconds(10).TotalMilliseconds))
{
    // timeout exceeded while waiting for the process to exit
}
2 голосов
/ 14 сентября 2010

Ответ WaitForExit лучше, потому что он блокирует, но причина, по которой ваш код не работает, в том, что вы хотите TimeSpan.TotalMilliseconds вместо TimeSpan.Milliseconds. Milliseconds дает вам что-то в диапазоне [-999,999]: http://msdn.microsoft.com/en-us/library/system.timespan.milliseconds.aspx

1 голос
/ 14 сентября 2010

Вызовите метод Kill для переменной процесса (p в вашем примере), это остановит процесс.

Примечание : цикл в вашем примере сильно загружает процессор. Вы должны использовать вызов WaitForExit для ожидания 10 секунд (как предлагает Дарин Димитров).

...