Я написал службу Windows, которая контролирует таблицу базы данных для ожидающих заданий и порождает потоки для запуска этих заданий, и каждый из этих потоков в свою очередь запускает процесс для выполнения фактической работы (этот процесс является служебной программой Microsoft, а не обычным один). Это отлично работает, но если одна из заданий занимает больше времени, чем обычно, я бы хотел убить эту работу.Как убить процесс, запущенный из потока (созданного threadpool) в C#?
Как это можно сделать? Нужно ли прервать поток или уничтожить процесс, запущенный потоком? Мне также нужно сохранить стандартный вывод этого процесса в текстовом файле. Для этого я использую следующий код.
using (Process process = Process.Start(startInfo))
{
LogToTextFile(process.StandardOutput.ReadToEnd());
process.WaitForExit();
exitCode = process.ExitCode;
}
Возможно ли нить проверить флаг в той же таблице и убить запущенный процесс, так что не нужно быть прервана? Я использую ThreadPool.QueueUserWorkItem
для создания темы. Что является самым надежным способом остановить эти запущенные процессы, не останавливая службу Windows?
Вы еще там. – xcud
@ xcud: Хорошая добыча; Благодарю. –
спасибо за ответ, но решение о том, следует ли убить процесс, берется пользователем и хранится в флагове в таблице, это не определенный срок. также я заметил, что когда я вызываю process.StandardOutput.ReadToEnd(), эта строка сама ждет, пока процесс не завершится, и элемент управления не будет передан следующей строке. поэтому я не уверен, что этот код будет работать. Я попробую это. – RKP