У меня есть исполняемый файл командной строки, который запускается из библиотеки классов C #. В некоторых очень редких ситуациях исполняемый файл зависает из-за передаваемых ему данных командной строки. К сожалению, это приводит к зависанию приложения, вызывающего библиотеку c #, в то время как оно бесконечно ждет завершения процесса.
Если командная строка exe не заканчивает выполнение в течение 1 секунды, она никогда не завершится. То, что я хотел бы сделать, это вызвать таймер сразу после запуска процесса и принудительно закрыть процесс, если он не завершился в течение нескольких секунд.
Какой здесь лучший подход? Решение должно оказывать минимальное влияние на производительность, поскольку этот процесс командной строки является узким местом в задаче с высокой повторяемостью.
Редактировать: Любая причина, почему я должен использовать System.Timer вместо Threading.Timer или наоборот?
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = workingDirectory;
startInfo.FileName = commandLineExe;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = strArguments;
// Call WaitForExit and then the using statement will close.
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
}
Пожалуйста, воздержитесь от предложений, чтобы я попытался выяснить, почему приложение командной строки зависает, или что мне следует преобразовать функциональность командной строки в исходный код. Мы активно работаем над этой проблемой, но стабильность приложения должна стоять на первом месте.